0

ユーザーがページからさまざまなオプションを選択できるアプリがあり、背後にあるコードが SQL クエリを作成して関連するレコードを返します。

この場合、ユーザーは次を選択しています。

  • 除算 != '1'

また、返されるレコードの Division が UserDivisions にある必要があるという自動制限もあります。これは、次のような変数です。

Division IS NULL OR Division IN ('1','1.1','1.1.1')

したがって、返されるレコードは、リストされた部門のいずれかに属しているか、値として NULL を持っている必要があります。

私のコードは現在、これらの制限を個別に処理しているため、最終的な SQL は次のようになります。

Select top 1000 Division, WoNum, WoType 
From WorkOrder
Where (Division IS NULL OR Division IN ('1','1.1','1.1.1'))
AND (Division <> '1')

このクエリは、Division = '1.1' および '1.1.1' のすべてのレコードを返します。また、Division '1' のレコードは返されませんが、Division = Null のレコードも返されません。

NULL を返すようにこのクエリを作成するにはどうすればよいですか? また、上記のクエリが NULL を返さないのはなぜですか?

4

2 に答える 2

1

and (Division <> '1')ヌルを排除します。これは、null を <> '1' に評価できないためです。RDBMS は「未定義」を返します。未定義は真ではなく、除外されます。

代わりにこれを行うことができます。しかし、部門1が必要であり、それを除外するので、奇妙に思えます。

WHERE ((Division IN ('1','1.1','1.1.1') AND (Division <> '1')) OR Division IS NULL)

于 2019-04-04T15:45:27.360 に答える