1

sub1とsub2はどちらもsuperと1対1の関係にあります。

特定のスーパーレコードのどちらか一方に結合が存在するかどうかを確認したいと思います。

次の2つのクエリは、希望する結果を生成するはずです。!ISNULL()とIS NOT NULLを使用する理由はありますか?

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (!ISNULL(sub1.id) OR !ISNULL(sub2.id)) AND super.id=123;

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (sub1.id IS NOT NULL OR sub2.id IS NOT NULL) AND super.id=123;
4

1 に答える 1

1

2番目の選択肢(IS NOT NULL)を使用します。クエリオプティマイザは、2番目のクエリの効率を支援できる場合とできない場合があります。ただし、クエリオプティマイザは機能を実行しません。可能なすべての行と列に対して指定した関数を評価する必要があることを前提としています。関数の意味を推測しようとはしません。

于 2013-02-19T13:36:08.070 に答える