3

これは過去数分間私を夢中にさせてきました

私はテーブルを持っています。たとえば、3つの列を持つtable_alphabetとしましょう。

letter(pri)  col1   col2   
a            24     55
b            45     45
c            23     44
...
y            33     55
z            45     22 

これで、私のアプリケーションにリストがあります('a'、'b'、'lol'、'cats'、'z'、'foo')。

私が行った場合

SELECT letter FROM table_alphabet WHERE letter IN ('a', 'b', 'lol', 'cats', 'z', 'foo')

行のみを取得します(a、b、z)

私が欲しいのは、「lol」、「cats」、「foo」を取得することです。または英語で、私のリストのどの項目がテーブルから欠落しているのか。

助けていただければ幸いです。今日は脳の機能不全になっているようです。

4

3 に答える 3

0

私は完全にベースから外れているかもしれませんが、SQLだけでそれを達成するつもりはないと思います。

ここで、リストをテーブルにロードし、それをtable_listと呼び、それをtable_alphabetに左結合し、アルファベットがnullであるすべての行を除外すると、除外のリストを取得できます。

于 2009-07-08T19:44:43.513 に答える
0

申し訳ありませんが、最初から質問を完全に読み間違えました。リスト内のすべての文字を行としてプルできるサブクエリが必要になります。私がこれを行うことを考えることができる唯一の方法は、それらをすべて一緒に結合することです:

select let from (select 'a' as let union select 'b' as let union select 'lol' as let union select 'cats' as let union select 'z' as let union select 'foo' as let) as innerletters where let not in (select letter from table_alphabet);

つまり、アプリケーションはリスト " ('a', 'b', 'lol', 'cats', 'z', 'foo')"を取得し、UNIONで書き直す必要があります。

(select 'a' as let union select 'b' as let union select 'lol' as let union select 'cats' as let union select 'z' as let union select 'foo' as let)

...そしてそれをクエリに挿入します。これにより、table_alphabetテーブルの文字列に存在しないリストから文字が返されます。

+------+
| let  |
+------+
| lol  |
| cats |
| z    |
| foo  |
+------+
于 2009-07-08T19:56:55.097 に答える
-3

NOT INコマンドは、フィルタリング対象の非静的リストでも機能します。次のようなサブクエリを使用できます。

select letter from table_alphabet where letter NOT IN ( select letter from exclude_table )
于 2009-07-08T19:42:52.910 に答える