1

我有三张桌子:

tbl_customers
tbl_users
tbl_reviews

我有一个应用程序,客户在其中为用户提交评论。我想要做的不是同一客户对同一用户进行多次评论。这就是我想做的。

SELECT
  *
FROM
  tbl_customers
WHERE
  tbl_customer.CustomerID != tbl_review.CustomerID
  AND tbl_user.UserID != tbl_reviews.UserID
  • CustomerID 是 tbl_customer 的 p_id
  • UserID 是 tbl_users 的 p_id。
  • tbl_review 中两者的外键关系。

提前致谢。

如果需要更多信息,请告诉我。

4

4 回答 4

4

对使用两列的 tbl_reviews 表设置唯一约束。这将完全禁止多个条目,这将允许您进行简单的连接。您只需要在添加条目时添加验证,这样当用户尝试为同一个人输入多个评论时,它就不会出错。

alter table tbl_reviews add unique index(reviewid, userid);

select *
from tbl_users as u
join tbl_reviews as r on r.userid = u.userid
于 2012-04-13T18:33:38.730 回答
1

如果您不希望 tbl_customer 对同一个 tbl_user 有多个评论,那么您可以根据 CustomerID 和 UserID 为 tbl_review 创建一个唯一索引。这将确保您不可能有两个具有相同链接的评论。

除此之外,您可以在发布之前进行简单的计数以查看评论是否已经存在: SELECT COUNT(*) FROM tbl_reviews WHERE CustomerID = @CustomerID AND UserID = @UserID

如果您说您想在数据库中有多个评论但只从每个客户中选择一个,那么您只需按客户 ID 分组并选择第一个/最后一个评论。

于 2012-04-13T18:34:20.867 回答
1

我同意唯一约束的想法。我想在 SQL Server(可能还有其他数据库)中添加它,您可以使用 MERGE 语句而不是 INSERT 语句,它将更新现有记录或插入新记录。但是,您可能只想检查是否存在评论,以及是否确实询问他们是否要更新它。在此人做的不仅仅是指定评论所在的用户之前,这样做,这样他们就可以调用现有的评论并进行更改,而不是重写所有内容。

于 2012-04-13T19:14:07.617 回答
-1
SELECT * FROM
tbl_users tu
 INNER JOIN 
tbl_reviews tr
ON tu.UserID=tr.UserID; 
于 2012-04-13T18:29:38.080 回答