Найдите коды дилеров, которые продают определенную часть для всех проектов

#sql

Вопрос:

У меня есть таблица «статистика» , которая состоит из 3 идентификаторов.

Идентификаторы: id_seller, id_part и id_proj

Из этой таблицы я хочу вернуть id_sellers, которые продают определенную часть всем проектам.

верните другими словами: id_seller, у которого id_part есть все значения id_projs.

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

Результат должен выглядеть так:

В таблице значение id_part P3 является единственной частью, которая содержит все значения id_projs, которые являются всеми («J1», «J2», «J3», «J4», «J5», «J6», «J7»).

тестовый код:

 SELECT id_seller, id_part, id_proj
FROM stats
WHERE id_seller = 'S2' AND id_part = 'P3' AND EXISTS (
      SELECT 1
      FROM stats
      WHERE id_proj IN ('J1', 'J2', 'J3', 'J4', 'J5', 'J6', 'J7')); 
 

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

Я пробовал подзапросы, Имея подсчет, случаи ext. чтобы решить проблему, но безуспешно.

Искал что-то ТОЛЬКО В ключевых словах, что бы возвращало id_parts, которые содержат только все значения. нет, если они содержат только один или несколько.

Ответ №1:

Возможно, есть лучшие решения, но я думаю, что что-то вроде этого должно сработать:

 SELECT s.id_seller
FROM stats s
WHERE s.id_part = 'P3'
AND 
(
   SELECT COUNT(DISTINCT id_proj)
   FROM stats s2
   WHERE s2.id_seller = s1.id_seller
   AND s2.id_part = s1.id_part
) = 7
 

Комментарии:

1. Ваше решение работает. Спасибо вам :). Я сделал только небольшое улучшение. Добавлен ОТДЕЛЬНЫЙ перед s.id-продавец, поэтому он возвращает только один S2 И заменяет » P3 » на «amp;часть», чтобы я мог вводить разные части(P).

2. Также вместо = 7 я пишу (ВЫБИРАЮ КОЛИЧЕСТВО (ОТДЕЛЬНЫЙ(id_proj)) ИЗ статистики); в случае, если данные изменятся.