Фильтрация данных из другой таблицы на основе столбца вместе с нулевыми значениями, присутствующими в той же таблице? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть 2 таблицы документов и гео

таблица документов:

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.company - это не что иное, как geo.investor

Например, взять категорию 1, В таблице фильтрации гео для категории1 у нас есть инвестор 20, поэтому мы должны получить документы в формате 1,2, даже если компания не имеет значения в таблице документов.Также, если категория для компании 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 голосов
/ 12 сентября 2018

Я думаю, вы хотите:

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;
...