2017-10-20 65 views
1

对不起,这个可怕的标题。想象一下这样的表格:http://sqlfiddle.com/#!9/48d921/1'探索性'SQL查询使用一个标准来查找更多条件

在这里,我们为名为“Bob”的所有用户运行查询,但我们也对与“Bob”相同的邮政编码中的所有用户以及同一个“键入“为Bob。

你可以看到我加入了相同的表格两次来达到这个目的。它的麻烦是它不能缩放;我想要“探索”的标准越多,我必须加入相同的表格越多,这使得陈述更加繁琐。

所以:

  • 什么是做到这一点的最好方法是什么?
  • 这种类型的查询是否有名称?
+0

我不认为你的SQLFiddle做你说什么它 - 这是我的解释:' SELECT u.name,link.name FROM USER u 加入地址a on a.user = u.id 加入地址a1在a1.postcode = a.postcode 加入link.id = a1的用户链接。用户 W这里u.name =“鲍勃” 和u.id!= link.id' –

+0

是的,错过了一个选择和额外的标准,编辑。 –

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

所以你扫描用户表中只有一次的每条记录检查连接标准答案

+0

这将如何扩展到多个“链接”标准,与邮政编码处于同一级别并以相同的方式工作? –

+0

可能是我不明白你的问题。你可以创建一个更多的查询,添加一个“连接”cirteria – StanislavL

+0

我已经添加了另一个标准。你可以看到select语句越来越混乱。 –