Как запросить выбор имени с конкретным кодом в поле и в то же время не имеет кода в том же поле - PullRequest
0 голосов
/ 22 декабря 2018

Пример моей таблицы

Name    Code
Jolas   sd02
Jolas   da014
Albert  cca01
Albert  da014
Julito  sd02
Julito  da014
Vergel  cca01
Vergel  da014

Я хочу выбрать все da014 без sd02, поэтому мои выходные данные должны быть Vergel и Albert, потому что у них обоих нет SD02

Как мне запроситьэто

спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Я обычно предпочитаю подход group by для этих типов проблем.Но если производительность является проблемой, то это может быть быстрее с правильными индексами:

select t.name
from t
where t.code = 'da014' and
      not exists (select 1 from t t2 where t2.name = t.name and t2.code = 'sd02');

В частности, вы хотите индексы на t(code, name) и t(name, code) - один для внешнего запроса и одинпредназначен для подзапроса.

Если вы используете group by, то фильтрация перед агрегацией может повысить производительность:

select t.name
from t
where t.code in ('da014', 'sd02')
group by t.name
having sum(t.code = 'sd02') = 0;

Вам нужно только проверить 'sd02'.Если его там нет, то name должен иметь другой код для обработки group by.

0 голосов
/ 22 декабря 2018

Вы можете использовать фильтрацию на основе условного агрегирования, используя GROUP BY с предложением HAVING:

SELECT Name
FROM your_table_name 
GROUP BY Name
HAVING 
  SUM(Code = 'da014') AND /* Has code `da014` */
  NOT SUM(Code = 'sd02') /* Does not have code sd02 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...