我正在尝试从表“俱乐部”中不存在的表“用户”中选择所有记录。但是,该句仍然显示在“俱乐部”表中存在的一些记录。
表:用户
ID, Name, Registration_Date
***************************
3, Mark, 5/1/2017
7, Paul, 5/2/2017
8, John, 5/3/2017
表:俱乐部
************
User_ID, Club_Name
3, Chicago
3, Texas
7, Miami
7, San Antonio
这是SQL句子:
SELECT
[Users].[ID],
[Users].[Name]
FROM
[Users]
LEFT JOIN
[Clubs]
ON
[Users].[ID] = [Clubs].[User_ID]
WHERE
[Clubs].[User_ID] IS NULL AND
[Users].[Status] = 'Active' AND
[Users].[Gender] = 'Female'
GROUP BY
[Users].[ID],
[Users].[Name]
ORDER BY
[Users].[ID] DESC
这是我得到的结果
8, John
3, Mark
出于某种原因,ID 3的用户仍在显示,该用户存在于“俱乐部”表中。
非常感谢任何帮助。
答案 0 :(得分:2)
它读起来像英语:从用户中选择User.Id不在俱乐部中。这是查询:
SELECT
[Users].[ID],
[Users].[Name]
FROM
[Users]
WHERE
[Users].[Status] = 'Active' AND
[Users].[Gender] = 'Female' AND
[Users].[ID] not in (select UserID from Clubs)
ORDER BY
[Users].[ID] DESC
有关IN operator的更多信息。
答案 1 :(得分:1)
这是詹姆斯提出的问题的解决方案:
检查两个表中是否有额外的空格(或类似的东西)用于" 3"记录,可能导致它无法正确匹配。我在本地重新创建了DB,查询对我有用。 -
问题是列状态中的空格。
我添加了此评论,因为正确的答案是作为评论提供的,并且没有找到任何其他选项来接受评论作为正确答案。
答案 2 :(得分:0)
试试这个
SELECT
[Users].[ID],
[Users].[Name]
FROM
[Users]
WHERE
[Users].[ID] NOT IN (SELECT [Clubs].[User_ID] FROM [Clubs]) AND
[Users].[Status] = 'Active' AND
[Users].[Gender] = 'Female'
GROUP BY
[Users].[ID],
[Users].[Name]
ORDER BY
[Users].[ID] DESC
答案 3 :(得分:0)
更新了查询
SELECT
[Users].[ID],
[Users].[Name]
FROM
[Users]
WHERE
[Users].[ID] IN
(SELECT [Users].[ID] except (SELECT UserId from Clubs group by Clubs.UserId))
AND
[Users].[Gender] = 'Female' AND
[Users].[Status] = 'Active' // other filters as necessary
ORDER BY
[Users].[ID] DESC
可能需要执行执行计划,可能不是性能,但会为您提供必要的结果
答案 4 :(得分:0)
SELECT [Users].[ID], [Users].[Name]
FROM [Users]
WHERE not exists(Select 1 from [Clubs] where [Clubs].[User_ID]=[Users].[ID])
AND [Users].[Status] = 'Active'
AND [Users].[Gender] = 'Female'
GROUP BY [Users].[ID], [Users].[Name]
ORDER BY [Users].[ID] DESC
Club表中不存在用户ID,并且将提取Users表中的用户ID。
答案 5 :(得分:0)
我认为问题在于左连接。
改变这个: 从 [用户] LEFT JOIN [俱乐部]
为此: 从 [用户] 正确的加入 [俱乐部]