1

これは奇妙な質問かもしれません。現在、大量のデータを含むテーブルがあります。PHP を使用して、IN 句を動的に作成しています。

SELECT * FROM table
WHERE field IN ('str1', 'str2', [...])

「str1」または「str2」と一致するレコードがないとしましょう。「str1」と「str2」を取得する方法はありますか?

4

3 に答える 3

1
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
于 2011-11-01T13:48:19.060 に答える
0

クエリを動的に構築しているときは、str値の記録を配列に保持します。次に、クエリを実行して結果の数を確認すると、結果がない場合は、文字列の配列で必要なことを何でも実行できます(これをどこかに記録したいと思います)。

于 2011-11-01T14:02:14.147 に答える
0

または単に

SELECT field from table WHERE field IN ( .. ) GROUP BY field;

これは、少なくとも 1 つの一致を持つ値のリストを含む配列 1 を返します。次に、初期リストと取得した配列を比較して、一致しない値を把握することで簡単に把握できます

于 2011-11-01T14:11:50.737 に答える