SQL Запрос - Как отфильтровать повторяющиеся значения - PullRequest
0 голосов
/ 09 июля 2020

введите описание изображения здесь

Если у меня две учетные записи (1 и 2), но я пытаюсь отфильтровать учетные записи, в которых есть яблоки, но нет апельсинов. Как бы вы это сделали на основе этих данных?

Вот что у меня есть сейчас:

SELECT * 
FROM products p
join accounts a on a.id = p.id
join 
(
  SELECT account
  FROM products p
  join accounts a2 on a2.id = p.id
  WHERE products LIKE '%Apples%'
) a2.id = a.id    
WHERE products NOT LIKE '%Oranges%'

Ответы [ 3 ]

0 голосов
/ 09 июля 2020
SELECT * FROM "YourTableName" 
WHERE Account_# NOT IN (
    SELECT Account_# FROM "TheSameTableNameAsMentionedBefore" 
    WHERE Product = "Oranges"
);

Должно работать. Но я не уверен, правильно ли я понял ваш вопрос. Вы упомянули что-то о «без дубликатов». Предлагаю вам взглянуть на DISTINCT. https://www.sqltutorial.org/sql-distinct/

0 голосов
/ 09 июля 2020

Вы можете использовать exists

select *
from your_table t1
where exists (select 1 
              from your_table t2
              where t2.account_num=t1.account_num and product='Apples')
and not exists (select 1 from 
                your_table t2
                where t2.account_num=t1.account_num and product='Oranges');
0 голосов
/ 09 июля 2020

Ваш запрос и данные образца не соответствуют друг другу. На основе данных :

select account_num
from t
where product in ('Apples', 'Oranges')
group by account_num
having min(product) = max(product) and min(product) = 'Apples';

Фактически вы можете просто предложение having для вашего примера:

having max(product) = 'Apples'

Это использует тот факт, что «Яблоки "встречается перед словом" Апельсины "в алфавитном порядке.

...