3

我有两张桌子,table1table2Table2包含来自 的 FK table1。目前,我table2的 FK 不再存在table1。我想删除那些table2FK 中不存在的记录table1。那是什么SQL?

这是我尝试过的“不在”:

SELECT ATTORNEYS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID 
FROM ATTORNEYS INNER JOIN ATTNY_PRACTICE_GROUPS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTNY_PRACTICE_GROUPS.[ATTY_ID] NOT IN ATTORNEYS.ATTY_ID

我可能不知道如何使用“NOT IN”,因为错误是表达式中没有 () 的 IN 运算符。

我已经尝试使用!=, <>,NOT INIS NULL到目前为止没有运气。感谢任何帮助。

4

2 回答 2

2
SELECT ID 
FROM ATTNY_PRACTICE_GROUPS G
WHERE NOT EXISTS (SELECT 1 FROM ATTORNEYS WHERE ATTY_ID = G.ATTY_ID)

此查询将查找具有不在 ATTORNEYS 中的 ATTY_ID 的任何 Attny_practice_group 行。

于 2013-10-10T15:31:21.610 回答
0

您需要的是 LEFT JOIN。您的 INNER JOIN 只会给您想要保留的记录。您的 NOT IN 语句不会在此处返回任何结果。将您的 INNER JOIN 更改为 LEFT JOIN 并选择 ATTNY_PRACTICE_GROUPS.[SomeColumn] IS NULL 的位置

像这样:

SELECT ATTORNEYS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID 
FROM ATTORNEYS LEFT JOIN ATTNY_PRACTICE_GROUPS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTNY_PRACTICE_GROUPS.[ATTY_ID] IS NULL

或者也许我读错了。如果您正在寻找 ATTY_ID 不存在于 ATTORNEYS 表中的实践组,它会是这样的:

SELECT ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID, ATTORNEYS.ATTY_ID 
FROM ATTNY_PRACTICE_GROUPS LEFT JOIN ATTORNEYS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTORNEYS.[ATTY_ID] IS NULL
于 2013-10-10T15:31:56.080 回答