Sql 在子表中没有父\u id关联时删除父表中的行

Sql 在子表中没有父\u id关联时删除父表中的行,sql,sql-server,Sql,Sql Server,我有一个名为Location的父表,它有20000行,还有两个子表,即Customer和Shop,它们大约有8000行。我想去掉两个表中都没有子表的位置。表如下所示: 父表1:位置:ID\u LocationPK,ID\u CityFK | Zip | ID_Location | |------|-------------| | 0001 | 1 | | 0011 | 2 | | 0002 | 3 | | 0021 | 4

我有一个名为Location的父表,它有20000行,还有两个子表,即Customer和Shop,它们大约有8000行。我想去掉两个表中都没有子表的位置。表如下所示:

父表1:位置:ID\u LocationPK,ID\u CityFK

| Zip  | ID_Location |
|------|-------------|
| 0001 | 1           |
| 0011 | 2           |
| 0002 | 3           |
| 0021 | 4           |
| 0003 | 5           |
| 0012 | 6           |
子表1:客户:客户IDPK,ID\U位置FK

| Cust_ID | ID_Location |
|---------|-------------|
| 1       | 1           |
| 2       | 3           |
| 3       | 5           |
| 4       | 2           |
| 5       | 1           |
| Shop_ID | ID_Location |
|---------|-------------|
| 1       | 1           |
| 2       | 2           |
| 3       | 6           |
| 4       | 3           |
| 5       | 1           | 
子表3:车间:车间IDPK,ID\U位置FK

| Cust_ID | ID_Location |
|---------|-------------|
| 1       | 1           |
| 2       | 3           |
| 3       | 5           |
| 4       | 2           |
| 5       | 1           |
| Shop_ID | ID_Location |
|---------|-------------|
| 1       | 1           |
| 2       | 2           |
| 3       | 6           |
| 4       | 3           |
| 5       | 1           | 
所需输出:我希望删除ID_Location=4的Location表中的行,因为它在两个子表中都没有任何子行

我所做的是

select * from Location where ID_Location not in (select ID_Location from Customer)

select * from Location where ID_Location not in (select ID_Location from Shop)
然后我对出现的行运行delete查询

delete from Location where ID_Location = 4
有没有办法运行嵌套查询来获取子表中没有任何条目的行?

这是您的查询

DELETE FROM LOC
FROM Location LOC
LEFT JOIN Customer CUST ON CUST.ID_Location = LOC.ID_Location
LEFT JOIN SHOP SH ON SH.ID_Location = LOC.ID_Location
WHERE CUST.ID IS NULL AND SH.ID IS NULL
如果要确保在适当的记录中运行,请首先运行以下命令:

SELECT LOC.*, CUST.ID, SH.ID
FROM Location LOC
LEFT JOIN Customer CUST ON CUST.ID_Location = LOC.ID_Location
LEFT JOIN SHOP SH ON SH.ID_Location = LOC.ID_Location
WHERE CUST.ID IS NULL AND SH.ID IS NULL
这是你的问题

DELETE FROM LOC
FROM Location LOC
LEFT JOIN Customer CUST ON CUST.ID_Location = LOC.ID_Location
LEFT JOIN SHOP SH ON SH.ID_Location = LOC.ID_Location
WHERE CUST.ID IS NULL AND SH.ID IS NULL
如果要确保在适当的记录中运行,请首先运行以下命令:

SELECT LOC.*, CUST.ID, SH.ID
FROM Location LOC
LEFT JOIN Customer CUST ON CUST.ID_Location = LOC.ID_Location
LEFT JOIN SHOP SH ON SH.ID_Location = LOC.ID_Location
WHERE CUST.ID IS NULL AND SH.ID IS NULL

从ID\u位置不在客户选择ID\u位置的位置和从店铺联盟选择ID\u位置不在店铺联盟选择ID\u位置的位置删除可能更有效,tho。从ID\u位置不在客户选择ID\u位置的位置和从店铺联盟选择ID\u位置不在店铺联盟选择ID\u位置的位置删除可能更有效,tho。