質問

期待どおりに機能していないクエリがあります

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つの数値が含まれるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top