これは奇妙な質問かもしれません。現在、大量のデータを含むテーブルがあります。PHP を使用して、IN 句を動的に作成しています。
SELECT * FROM table
WHERE field IN ('str1', 'str2', [...])
「str1」または「str2」と一致するレコードがないとしましょう。「str1」と「str2」を取得する方法はありますか?
SELECT dmy.id
FROM (
SELECT 'str1' as id
UNION ALL
SELECT 'str2'
UNION ALL
.....
) dmy
LEFT JOIN some_table ON some_table.field = dmy.id
WHERE some_table.field IS NULL
特別なリクエストに応じて、ここに説明があります。
派生テーブル (内部選択) は、必要なすべての値を含む「ダミー」テーブルを作成するだけです。次に、このダミー テーブルが実際のテーブルに外部結合されます。外部結合テーブル (some_table) に値がない (NULL) ものは、ダミーの「テーブル」の値のリストには存在しません。
派生テーブルの効果を確認するには、結合せずにスタンドアロンで実行します。
SELECT dmy.id
FROM (
SELECT 'str1' as id
UNION ALL
SELECT 'str2'
UNION ALL
.....
) dmy
クエリを動的に構築しているときは、str値の記録を配列に保持します。次に、クエリを実行して結果の数を確認すると、結果がない場合は、文字列の配列で必要なことを何でも実行できます(これをどこかに記録したいと思います)。
または単に
SELECT field from table WHERE field IN ( .. ) GROUP BY field;
これは、少なくとも 1 つの一致を持つ値のリストを含む配列 1 を返します。次に、初期リストと取得した配列を比較して、一致しない値を把握することで簡単に把握できます