我正在做一个有点像 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/