mysql - 从 SQL 查询中排除一些结果

标签 mysql sql

我正在做一个有点像 FB 的项目。所以我有 friend (通过 2 个用户之间的请求存储在“请求”中,“响应”为 1。我也有“圈子”,就像 friend 组一样。我想要的是一个 SELECT 返回所有 friend 而不是在一个给定的圈子里。我相信查询是正确的,直到“AND NOT”,此时我想排除所有请求( friend ),这些请求( friend )具有响应的发送者或接收者(我知道它拼写错误)已经包含在圆圈中。

SELECT us.Username ,
       ur.Username
FROM Requests r 
Join Users    us ON us.UserID = r.Sender 
JOIN Users    ur ON ur.UserID = r.Reciever 
WHERE (    Sender   = ( SELECT UserID
                        FROM Users
                        WHERE Username=?
                      ) 
        OR Reciever = ( SELECT UserID
                        FROM Users
                        WHERE Username = ?
                      )
      ) 
  AND Response=1 
  AND NOT ON ( SELECT un.Username
               FROM CircleMembers c 
               Join Users         un ON un.UserID = c.UserID 
               WHERE CircleID = ( SELECT CircleID
                                  FROM Circles WHERE Name = ?
                                )

谢谢!

最佳答案

这个查询应该有效:

SELECT us.Username, ur.Username 
FROM Requests r 
Join Users us ON us.UserID = r.Sender 
JOIN Users ur ON ur.UserID = r.Reciever
WHERE (us.Username = ? OR ur.Username = ?)
  AND r.Response = 1
  AND NOT EXISTS (
    SELECT 1 FROM Circles c
    JOIN CircleMembers cm ON c.CircleID = cm.CircleID
    WHERE c.Name = ?
    AND cm.UserID IN (us.UserID, ur.UserID)
  )

关于mysql - 从 SQL 查询中排除一些结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540584/

相关文章:

sql - 在日期时间间隔内展开表格

sql - 当您有这样的发票表时是否需要付款表?

mysql - #2002 无法登录MySQL服务器错误

mysql - mysql中的存储过程变量

MySQL:将日期范围扩展到新行

MySQL 我的索引好吗?

MySQL - 按父级查找子类属性的最有效方法?

mysql - SQL - 如何从具有特定数据值和只出现一次的键的表中选择一行

MySQL SELECT 语句,其中请求参数的字符多于数据库中的内容

sql - 将日期插入 db2