sqlは句にはありません
-
25-09-2019 - |
質問
期待どおりに機能していないクエリがあります
Q1:
SELECT id, name
FROM vw_x
WHERE id NOT IN (select pid from table_x)
GROUP BY id, name
Having max(c_date) > GETDATE()
Q2:
SELECT id, name
FROM vw_x
GROUP BY id, name
Having max(c_date) > GETDATE()
Q1は、これらのIDがtable_x Q2にないことを知っていても、何も返していません。
私のクエリの何が問題になるのでしょうか?
解決
テーブルにヌル値があります
これを試して
SELECT id, name
FROM vw_x
WHERE id NOT IN (select pid from table_x where pid is not null)
GROUP BY id, name
Having max(c_date) > GETDATE()
またはこれ
SELECT id, name
FROM vw_x
WHERE NOT EXISTS (select 1 from table_x where pid = vw_x.id )
GROUP BY id, name
Having max(c_date) > GETDATE()
参照してください 別のテーブルに存在しない1つのテーブルからすべての行を選択します
他のヒント
左結合を使用するのはどうですか?
SELECT id, name
FROM vw_x
LEFT JOIN table_x on id = pid
WHERE pid IS NULL
GROUP BY id, name
Having max(c_date) > GETDATE()
別の状況があります。サブクエリには何も返されません。 SQL Serverは、句にnotがnullリストを返す場合、予想どおりに機能しません。次のような質問があります:
select * from table where id not in (select id from tableB where somecondition(x))
サブクエリにIDのリストが含まれている場合、クエリは予想どおりにデータを返します。しかし、サブクエリが何も返さない場合、クエリは引き続きデータを返しますが、その後スタックされます。
クエリを次のように変更し、問題を解決しました。
select * from table where id not in (select id from tableB where somecondition(x) **union all select 0**)
これにより、サブクエリに少なくとも1つの数値が含まれるようになります。
所属していません StackOverflow