Поиск, если столбец имеет «а» И «б» - PullRequest
0 голосов
/ 13 мая 2018

Предположим, у вас есть две таблицы ... таблица 1 и таблица 2.

столбцы таблицы 1: имя / возраст / область

таблица 2 имеет область / должность *

Я хотел бы выбрать область и название должности, только если область включает в себя оба имени 'sarah' и 'Phillip' (должно включать ОБА заданные имена)

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Другой метод не такой гибкий, как метод агрегации. Однако у вас есть две таблицы, и они могут иметь лучшую производительность:

select t2.*
from table2 t2
where exists (select 1 from table1 t1 where t1.area = t2.area and t1.name = 'sarah') and
      exists (select 1 from table1 t1 where t1.area = t2.area and t1.name = 'Phillip');

В частности, это может использовать индекс table1(area, name).

0 голосов
/ 13 мая 2018

если у вас есть уникальное ограничение для таблицы 1 для (область, имя) и если у вас есть проблемы с производительностью при использовании более общих ответов, вы можете поэкспериментировать с объединениями, которые механизм БД иногда может оптимизировать больше, чем коррелированный подзапрос:

select t2.*
from table2 t2
join table1 t1a on t1a.area = t2.area and t1a.name = 'sarah'
join table1 t1b on t1b.area = t2.area and t1b.name = 'Phillip';
0 голосов
/ 13 мая 2018

Один из способов сделать это - комбинация exists, group by having и count:

SELECT area, JobTitle
FROM Table2 t2
WHERE EXISTS
(
    SELECT t1.Area
    FROM Table1 t1
    WHERE t1.Area = t2.Area
    AND Name IN('sarah', 'Phillip')
    GROUP BY t1.Area
    HAVING COUNT(DISTINCT t1.Name) = 2
)
...