список тех идентификаторов клиентов из таблицы X, которые купили все продукты из таблицы Y? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть 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. ~ Невозможно выполнить жесткий код, поскольку таблица постоянно обновляется

Ответы [ 5 ]

0 голосов
/ 04 июля 2018

попробуйте это:

выберите * из x, где находится prod_key (выберите prod_key из Y)

0 голосов
/ 04 июля 2018

Вы можете сделать то же самое, используя INNER JOIN с GROUP BY и 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)
0 голосов
/ 04 июля 2018

Вы можете попробовать следующий код, чтобы получить уникальный список Cust_ID

select DISTINCT Cust_Id from X where x.Prod_key in (select y.Prod_key from Y)

0 голосов
/ 04 июля 2018

Вы также можете попробовать внутреннее объединение, так как вам нужен только customerid, чей productkey присутствует в таблице y

SELECT x.Cust_Id 
FROM x 
INNER JOIN y
ON x.Prod_Key = y.Prod_key 
0 голосов
/ 04 июля 2018

Вы можете попробовать следующее:

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);

DEMO SQL FIDDLE

...