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。我认为这是一个坏主意,因为重构不好,性能也不好。

有没有更好的方法来编写这个查询?

4

0 回答 0