根据列过滤来自其他表的数据以及同一表中存在的空值?

时间:2018-09-12 19:58:11

标签: mysql sql mysql-workbench

我有2个表格docs和geo

docs表:

id  category company headorg type
1   1        20      4       aaa
2   1        null    4       bbb
3   null     20      4       ccc
4   null     20      4       ddd
5   2        null    4       bbb
6   null     20      4       ccc

地理位置表:

id  category investor headorg 
1   1        20       4       
2   1        21       4      
3   1        22       4      
4   2        21       4      
5   2        22       4     

现在,我必须根据通过的company = 20来查询docs表,还必须根据类别检查地理位置表。

这里docs.company只不过是geo.investor

例如,以类别1, 在筛选类别1的表格地理位置时,我们存在投资者20 因此,即使公司在docs表中为空,我们也应该获得1,2的doc记录。 另外,如果公司20的类别为空,即文档记录3、4、6

所以我的查询应该返回1,2,3,4,6

我写了这个,但是我得到了所有记录1,2,3,4,5,6

SELECT  * FROM doc d where (company is null  or company = 20) 
and 20 in ( select geo.investor from geo join doc d on d.category = geo.category)

1 个答案:

答案 0 :(得分:1)

我想你想要

SELECT d.*
FROM doc d 
WHERE d.company = 20 OR 
      d.category = (SELECT g.category FROM geo g WHERE g.investor = 20);

或者,将其表达为JOIN

select d.*
from doc d left join
     geo g
     on d.category = g.category and g.investor = 20
where d.company = 20 or g.category is not null;