У меня есть 2 таблицы X & Y,
Таблица X (имеет 5 записей)
Cust_Id Prod_Key
1 'A'
1 'D'
2 'C'
3 'D'
2 'B'
Таблица Y (имеет 2 записи)
Prod_Key
'A'
'D'
Нужен SQL, чтобы перечислить Cust_ID, который имеет все продукты из таблицы Y. ~ Невозможно выполнить жесткий код, так как таблица обновляется
Вы можете попробовать следующее:
select
cust_id
from
Y
LEFT OUTER JOIN
X
on Y.Prod_key = X.Prod_key
Group by
Cust_id
having
count(DISTINCT X.Prod_key) = (select count(*) from Y);
Вы можете сделать то же самое, используя INNER JOIN
с GROUP BY
и COUNT
как COUNT
ниже.
SELECT x.Cust_Id
FROM X x
INNER JOIN Y y ON y.Prod_Key = x.Prod_Key
GROUP BY x.Cust_Id
HAVING COUNT(y.Prod_Key) = (SELECT COUNT(*) FROM Y)
HAVING
фильтрует записи. Просто добавьте столбцы count в запросе как COUNT(y.Prod_Key) countExist
после чего вы получите countExist
2
для x.Cust_Id=1
и 1
для x.Cust_Id=3
поэтому после добавления предложения HAVING
будет возвращен идентификатор с равным числом Prod_Key(s)
как у нас в таблице Y
Я уверен, вы поймете это, пожалуйста, попробуйте один раз.
попробуй это:
выберите * from x, где prod_key в (выберите prod_key из Y)
Вы также можете попробовать внутреннее соединение, так как вам нужен только customerid
чей productkey
присутствует в таблице y
SELECT x.Cust_Id
FROM x
INNER JOIN y
ON x.Prod_Key = y.Prod_key
Вы можете попробовать следующий код, чтобы получить уникальный список Cust_IDs
select DISTINCT Cust_Id from X where x.Prod_key in (select y.Prod_key from Y)