我有三张桌子:
tbl_customers
tbl_users
tbl_reviews
我有一个应用程序,客户为用户提交评论。我希望能够做的是没有来自同一客户的同一用户的多个评论。这就是我想要做的。
SELECT
*
FROM
tbl_customers
WHERE
tbl_customer.CustomerID != tbl_review.CustomerID
AND tbl_user.UserID != tbl_reviews.UserID
提前致谢。
如果需要更多信息,请告诉我。
答案 0 :(得分: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
答案 1 :(得分:1)
如果您不希望tbl_customer对同一个tbl_user进行多次审核,那么您可以根据CustomerID和UserID为tbl_review创建唯一索引。这将确保您没有可能通过相同的链接进行两次评论。
除此之外,您可以在发布之前进行简单的计数以查看评论是否已存在:
SELECT COUNT(*) FROM tbl_reviews WHERE CustomerID = @CustomerID AND UserID = @UserID
如果您想要在数据库中进行多次审核,但只从每个客户中选择一个,那么您只需要按客户ID进行分组并选择第一个/最后一个审核。
答案 2 :(得分:1)
我同意独特约束的想法。我想在SQL Server(以及可能的其他dbs)中添加它,您可以使用MERGE语句而不是INSERT,它将更新现有记录或插入新记录。但是,您可能只想检查是否存在评论,是否确实询问他们是否要更新评论。在此人做的不仅仅是指定审阅所在的用户之前执行此操作,这样他们就可以调整现有审阅并进行更改而不是重写所有内容。
答案 3 :(得分:-1)
SELECT * FROM
tbl_users tu
INNER JOIN
tbl_reviews tr
ON tu.UserID=tr.UserID;