-1

In 演算子を使用した SQL クエリは、IN 句に記載されているデータを返します。IN に記載されている 1 つのパラメーターに対してデータが存在しないことを確認する方法

例 :

Select EmpName from Salary Where EmpID In (1,2,3,4,100)

現在、テーブルには ID 100 のレコードはありませんが、結果にはこれが反映されていません。

どんな手掛かり

4

2 に答える 2

2

私はおそらく一時テーブルを作成し、LEFTまたはRIGHT結合を実行してから、常にEmpID一時テーブルから選択し、表示NULLまたは表示EmpNameSalaryます。

その後、次のようなクエリになります。 -

SELECT
    T.EmpId,
    S.EmpName
FROM
   Salary S
LEFT OUTER JOIN
   TempTable T
ON
   T.EmpID = EmpID
于 2013-09-20T12:52:05.567 に答える
0

これ

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構造。

于 2013-09-20T12:44:37.530 に答える