In 演算子を使用した SQL クエリは、IN 句に記載されているデータを返します。IN に記載されている 1 つのパラメーターに対してデータが存在しないことを確認する方法
例 :
Select EmpName from Salary Where EmpID In (1,2,3,4,100)
現在、テーブルには ID 100 のレコードはありませんが、結果にはこれが反映されていません。
どんな手掛かり
私はおそらく一時テーブルを作成し、LEFT
またはRIGHT
結合を実行してから、常にEmpID
一時テーブルから選択し、表示NULL
または表示EmpName
しSalary
ます。
その後、次のようなクエリになります。 -
SELECT
T.EmpId,
S.EmpName
FROM
Salary S
LEFT OUTER JOIN
TempTable T
ON
T.EmpID = EmpID
これ
Select EmpName
from Salary
Where EmpID In (1,2,3,4,100)
と同等です
Select EmpName
from Salary
Where EmpID = 1
OR EmpID = 2
OR EmpID = 3
OR EmpID = 4
OR EmpID = 100
そして、where 条件が true であるすべての行を返します。
そのような行がない場合、EmpID=100 の行は返されません...
これは、MySQL で目的を達成するための厄介な方法です。
select ids_to_get.id, EmpName from
from
(select 1 id
union all
select 2 id
union all
select 3 id
union all
select 4 id
union all
select 100 id) ids_to_get
left join Salary on ids_to_get.id = Salary.EmpID
これにより、一方の列に ID が返され、もう一方の列に従業員名が返されます。そのような従業員がいない場合、名前は NULL になります。(これが LEFT JOIN の機能です)
しかし、これは醜いです。実際、非常に醜く、スケーラブルではなく、一般的に避けるべきものです。このような構成を使用しないことをお勧めします...一時テーブルを作成する方法がなく、ID が別のクエリから取得されていない場合は、このユニオンを使用するのではなく、アプリケーションで確認することをお勧めします-ed構造。