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

使用一个条件查找更多条件的“探索性”SQL查询,sql,Sql,很抱歉这个糟糕的标题。想象一下这样的表格: 在这里,我们为名为Bob的所有用户运行一个查询,但我们也对与Bob位于相同邮政编码的所有用户以及与Bob具有相同类型的所有用户感兴趣 您可以看到,为了实现这一点,我两次加入了相同的表。它的问题在于它不可伸缩;我想探索的标准越多,我就必须加入相同的表的次数就越多,这使得select语句更加繁琐 因此: 最好的方法是什么? 这种类型的查询是否有名称? 答案更新了 SELECT FROM user where u.name="Bob" OR (u.po

很抱歉这个糟糕的标题。想象一下这样的表格:

在这里,我们为名为Bob的所有用户运行一个查询,但我们也对与Bob位于相同邮政编码的所有用户以及与Bob具有相同类型的所有用户感兴趣

您可以看到,为了实现这一点,我两次加入了相同的表。它的问题在于它不可伸缩;我想探索的标准越多,我就必须加入相同的表的次数就越多,这使得select语句更加繁琐

因此:

最好的方法是什么? 这种类型的查询是否有名称? 答案更新了

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

因此,您只需为每个记录扫描一次users表,检查链接条件

我认为您的SqlFIDLE不会像您所说的那样-以下是我的解释:`SELECT u.name,link.name FROM USER u JOIN ADDRESS a on a.USER=u.id JOIN ADDRESS a1 on a1.postcode=a.postcode JOIN USER link on link.id=a1.USER WHERE u.name=Bob and u.id!=link.id`是的,遗漏了一个select out和额外的条件,已编辑。我绝对不是专家,但这听起来像是在非关系数据库中更好地处理的那种查询模式。我觉得这听起来很奇怪。你可能是对的,我考虑过了。在某些情况下,使用单独的查询可能是正确的答案。这将如何扩展到多个链接条件,与邮政编码处于同一级别,并以相同的方式工作?可能是我没有正确理解您的问题。你能再创建一个查询添加一个链接吗?我已经添加了另一个条件。您可以看到select语句变得越来越混乱。这种类型的概念查询是否有名称而不是select的名称,或者,我的意思是,查询方法是否有名称?很遗憾,我不知道