(これはこの質問のフォローアップです:サブクエリを使用すると結果が重複するのはなぜですか? )
どうすればこのようなものをより良くすることができますか?
(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 回使用していることがわかります。悪いリファクタリングと悪いパフォーマンスのように、これは悪い考えだと思います。
このクエリを記述するより良い方法はありますか?