0

(これはこの質問のフォローアップです:サブクエリを使用すると結果が重複するのはなぜですか? )

どうすればこのようなものをより良くすることができますか?

(select * from tableOne A, tableTwo B where ~) union (select * from tableTwo)

特定のケース

テーブルワン

select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone;

私の友人のuserNumのリストで返されます。

私が使っている

テーブルツー

select A.userNum from users A, addressbook B, 
(select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C 
where C.userNum=B.userNum and A.phone=B.phone;

私の友達の友達のuserNumsのリストを返します。TableTwo が TableOne をテーブル C として使用していることがわかります。

次に、友達のuserNumと友達の友達のuserNumをこのように取得したいと思います。

テーブルスリー

TableOne union TableTwo;

最後に、TableThree を使用して、私の友人の友人ではない人の userNums を取得します。

select A.userNum from users A where A.userNum NOT IN TableThree;

TableThree がサブクエリ TableOne をクエリで 2 回使用していることがわかります。悪いリファクタリングと悪いパフォーマンスのように、これは悪い考えだと思います。

このクエリを記述するより良い方法はありますか?

4

0 に答える 0