Sql 在子表中没有父\u id关联时删除父表中的行
我有一个名为Location的父表,它有20000行,还有两个子表,即Customer和Shop,它们大约有8000行。我想去掉两个表中都没有子表的位置。表如下所示: 父表1:位置:ID\u LocationPK,ID\u CityFKSql 在子表中没有父\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
| 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。