-5

たとえば、次の外部キー ID があるとします。

 10437 
 10476 
 13212 
 13215 

そのうちの 1 つをプライマリ テーブルから削除したい、つまり、このセットから欠落しているのはどれですか? どうすればいいですか?私は、inステートメントのいくつかのバリエーションを想定しています。

thx事前に

編集#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 に答える