“探索性”SQL查询使用一个条件查找更多条件

时间:2017-10-20 14:00:32

标签: sql

抱歉这个可怕的头衔。想象一下这样的表:http://sqlfiddle.com/#!9/48d921/1

在这里,我们对名为“Bob”的所有用户运行查询,但我们也对与“Bob”相同的邮政编码中的所有用户以及与Bob相同“类型”的所有用户感兴趣。

你可以看到我加入了两次相同的表来实现这一目标。它的问题在于它不能扩展;我想要“探索”的标准越多,我必须加入相同的表,使select语句更加麻烦。

所以:

  • 最好的方法是什么?
  • 此类查询是否有名称?

1 个答案:

答案 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")
     )

因此,对于检查链接条件的每条记录,您只扫描一次用户表