-5

例如,我有以下外键 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 

这些数字大约有数百个项目,因此只想删除孤立的记录,这不是传统的外键关系,因此外部连接不起作用。

4

3 回答 3

4

您可以NOT IN像这样使用谓词:

SELECT *
FROM YourTableName
WHERE ReferenceId NOT IN(10437, 10476, 13212, 13215);

SQL 小提琴演示

更新:如果您想要存在的 Id,请使用IN谓词:

SELECT *
FROM YourTableName 
WHERE ReferenceId IN (10437, 10476, 13212, 13215);

SQL 小提琴演示

更新 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;

SQL 小提琴演示

两者都应该返回:

10476 
13212 
于 2012-11-11T02:18:03.300 回答
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)

为您提供辅助表中的行,其外键在主表中不再存在。

于 2012-11-11T02:19:44.833 回答
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方言

于 2012-11-11T02:41:04.323 回答