我有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)
答案 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;