(这是对这个问题的跟进:为什么我的结果在使用子查询时重复?)
我怎样才能使这样的事情变得更好?
(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。我认为这是一个坏主意,因为重构不好,性能也不好。
有没有更好的方法来编写这个查询?