你能在SQL中查询这样的查询吗?

时间:2012-04-13 18:25:18

标签: sql relational-database

我有三张桌子:

tbl_customers
tbl_users
tbl_reviews

我有一个应用程序,客户为用户提交评论。我希望能够做的是没有来自同一客户的同一用户的多个评论。这就是我想要做的。

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

提前致谢。

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

4 个答案:

答案 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;