查询以从表中选择所有ID为参考表中不存在的ID?

时间:2020-10-22 17:23:21

标签: sql

SELECT [USER_ID]
  FROM [DB].[dbo].[PhoneNumbers]
  WHERE NOT EXISTS (SELECT [USER_ID] FROM [DB].[dbo].[Users])

我正在尝试类似的操作,但是我陷入了SQL Server语法的困扰。

我需要从PhoneNumbers表中选择所有具有User_ID不存在的User_ID的行,以便删除孤立的数据。

3 个答案:

答案 0 :(得分:1)

请尝试以下查询

SELECT [USER_ID]
FROM [DB].[dbo].[PhoneNumbers]
WHERE [USER_ID] NOT IN (SELECT [USER_ID] FROM [DB].[dbo].[Users])

答案 1 :(得分:0)

如果需要在SQL Server中将关键字作为表名括起来,请使用[],在MySQL中请使用反引号。 尝试删除方括号并用反引号代替。

答案 2 :(得分:0)

您的查询只需要一个相关子句:

SELECT [USER_ID]
FROM [DB].[dbo].[PhoneNumbers] p
WHERE NOT EXISTS (SELECT 1 FROM [DB].[dbo].[Users] U WHERE u[USER_ID] = p.[USER_ID]);

我强烈建议您在子查询中使用NOT EXISTS而不是NOT IN。如果子查询返回 any NOT IN值,则NULL的行为不符合预期;在这种情况下,将不会返回任何行。

相关问题