比如说我有以下外键ID:
10437
10476
13212
13215
我希望找到其中一个已从主表中删除的内容,即这个中缺少哪一个?我该怎么做?我对in
语句的某些变体进行了假设。
编辑#1
所以重新说一下,我想要一些像:
TABLE
id
10437
13215
select something from items where id not in (10437, 10476, 13212, 13215)
would return:
10476
13212
这些数字大约是数百个项目,因此只想删除孤立的记录,而不是传统的外键关联,因此外连接不起作用。
答案 0 :(得分:4)
您可以使用 NOT IN
谓词,如下所示:
SELECT *
FROM YourTableName
WHERE ReferenceId NOT IN(10437, 10476, 13212, 13215);
更新:如果您希望ID存在,请使用IN
谓词:
SELECT *
FROM YourTableName
WHERE ReferenceId IN (10437, 10476, 13212, 13215);
<击> 撞击>
更新2:要清除此问题,您需要表格中不存在的ID列表中的ID列表。这是同样的想法,但另一种方式
SELECT FROM (list of ids) WHERE id NOT IN (SELECT referenceid from Table);
不是这个:
SELECT FROM Table WHERE id not in (list of ids ) will give you the other list;
因为这将从表中提供id列表,而不是id列表。
你可以这样做:
SELECT *
FROM
(
SELECT 10437 id
UNION ALL
SELECT 10476
UNION ALL
SELECT 13212
UNION ALL
SELECT 13215
) t1
WHERE id NOT IN (SELECT referenceid FROM YourTableName);
或RIGHT JOIN
如此:
SELECT t2.Id
FROM YourTableName t1
RIGHT JOIN
( SELECT 10437 id
UNION ALL
SELECT 10476
UNION ALL
SELECT 13212
UNION ALL
SELECT 13215
) t2 ON t1.ReferenceID = t2.id
WHERE t1.referenceid IS NULL;
两者都应该返回:
10476
13212
答案 1 :(得分:2)
select * from your-table where id not in (your-list-of-ids)
根据您使用的数据库your-list-of-ids
,可以是嵌套查询,如:
select id from your-other-table
更清晰
select id from your-primary-table
为您提供主表中的所有ID。
select * from your-secondary-table where foreign_key_id not in (select id from your-primary-table)
为您提供辅助表中的行,其主键在主表中不再存在。
答案 2 :(得分:0)
select t1.foreign_key_field from table_with_foreign_key as t1
left join table_with_primary_key as t2 on t2.id = t1.foreign_key_field
where t2.id is null
语法取决于sql dialect