-1

请看一下这个查询,并尝试给我任何其他可以更有效地给出完全相同结果的想法。

SELECT username
FROM users
WHERE username NOT IN (
    SELECT DISTINCT username
    FROM users, friends 
    WHERE 'user1' IN (you,friend,username) 
      AND you     IN ('user1',username) 
      AND friend  IN ('user1',username))
  AND username <> 'user1'

这是一个现场演示

4

1 回答 1

0

它当然效率不高 - 你的子选择中有一个笛卡尔。从您的查询中,您实际上想要实现的目标并不是特别清楚。如果你描述了这个问题,它会更有帮助。不过,我猜您正在尝试查找所有不是“user1”朋友的用户..?在这种情况下,这应该工作:

SELECT username 
FROM users 
WHERE username NOT IN (
SELECT DISTINCT you 
FROM friends 
WHERE friend = 'user1'
UNION ALL 
SELECT DISTINCT friend 
FROM friends 
WHERE you = 'user1') 
AND username <> 'user1'
于 2013-10-22T17:31:47.607 回答