Выберите строки из связанной таблицы, которая соответствует различным условиям - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть таблица с именем places, которая выглядит следующим образом:

enter image description here

и еще одна таблица с именем place_addons_saved, которая выглядит следующим образом:

enter image description here

Как я могу написать запрос, который относится к place_addons_saved.place и places.id и ищет строки, соответствующие ТОЛЬКО местам, которые имеют все условия?

Например, когда я буду искать строки с place_addon = 163, place_option = 329 и place_addon = 162, place_option = 324, вернется место с идентификатором 80, но когда я буду искатьстроки, которые имеют place_addon = 162, place_option = 326 и place_addon = 163, place_option = 330, запрос не должен ничего возвращать, потому что позиция 80 не соответствует второму условию

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Это может работать:

With GetResult (place,chk1,chk2) As
(
SELECT 
   pas.place,
   sum(Case When (pas.place_addon = 163) AND (pas.place_option = 329) then 1 Else 0 End) As chk1,
   sum(Case When (pas.place_addon = 162) AND (pas.place_option = 324) then 1 Else 0 End) As chk2
FROM 
   places AS p RIGHT OUTER JOIN
   place_addons_saved AS pas ON p.id = pas.place
   group by pas.place
 )
 Select * From GetResult Where chk1 > 0 and chk2 > 0
0 голосов
/ 24 ноября 2018

Если я правильно понимаю, вы можете использовать group by и having:

select place
from place_addons_saved
where (place_addon = 163 and place_option = 329) or
      (place_addon = 162 and place_option = 324)
group by place
having count(*) = 2;  -- "2" is the number of comparisons

Чтобы получить всю информацию о местах:

select p.*
from places p
where p.id in (select place
               from place_addons_saved
               where (place_addon = 163 and place_option = 329) or
                     (place_addon = 162 and place_option = 324)
               group by place
               having count(*) = 2;  -- "2" is the number of comparisons
              );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...