如何重构(或提高性能)重复的子查询

时间:2013-10-19 10:46:45

标签: mysql sql database

(这是对此问题的跟进:Why is my result duplicated when using subquery?

我怎样才能做出更好的这样的事情?

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

具体案例

TableOne

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

返回我朋友的userNum列表。

我使用

TableTwo

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;

返回my Friend的朋友的userNums列表。您可以看到TableTwo使用TableOne作为表C.

然后我希望得到我朋友的userNum和朋友的朋友'userNum。

TableThree

TableOne union TableTwo;

最后,我将使用TableThree获取那些不是我朋友的朋友的用户名。

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

您可以看到TableThree在查询中使用了两次子查询TableOne。我认为这是一个糟糕的主意,因为重构不好和性能不佳。

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

0 个答案:

没有答案