抱歉这个可怕的头衔。想象一下这样的表:http://sqlfiddle.com/#!9/48d921/1
在这里,我们对名为“Bob”的所有用户运行查询,但我们也对与“Bob”相同的邮政编码中的所有用户以及与Bob相同“类型”的所有用户感兴趣。
你可以看到我加入了两次相同的表来实现这一目标。它的问题在于它不能扩展;我想要“探索”的标准越多,我必须加入相同的表,使select语句更加麻烦。
所以:
答案 0 :(得分:1)
答案更新
SELECT
FROM user
where u.name="Bob"
OR (u.postcode in (SELECT a.postcode
FROM USER u
JOIN ADDRESS a on a.user=u.id
WHERE u.name="Bob")
)
OR (u.type in (SELECT ut.type
FROM USER u
JOIN USER_TYPE ut1 on u.id=ut1.user
WHERE u.name="Bob")
)
因此,对于检查链接条件的每条记录,您只扫描一次用户表