私はこの非常に単純な目標を持っていますが、単純な解決策は考えられませんでした。ユーザー入力から取得される値のリストがあり、そのうちの少なくとも 1 つがデータベースに存在しないかどうかを確認したいと考えています。入力した値が重複する可能性があることに注意してください。
マイテーブル:
| id | name |
| 0 | Bob |
| 1 | Ben |
| 2 | John |
| 3 | Rex |
ユーザーが入力したサンプル値:
1、2、2、4
存在しない値の数。この場合は 4 です。
1
私はこのようなことができます:
select count(userInput.value)
from
(select 1 as value
union all
select 2
union all
select 2
union all
select 4) as userInput
left join myTable
on myTable.value = myTable.id
where myTable.id is null
上記のコードは、myTable から一致しない (myTable.id が null) すべての値をカウントします。これは機能しますが、多くのユニオンを使用する必要のない単純なソリューションを探しています。それをやろうとした人はいますか?
編集
これは動作しません!
select count(myTable.id)
from myTable
where myTable.id not in(1,2,2,4)
上記のコードは、入力値に存在しない ID をカウントします。ID 0 と 3 は入力値に存在しないため、結果は 2 になります。値 4 はテーブルに存在しない唯一の値であるため、予想される出力は 1 であることに注意してください。