#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)) ИЗ статистики); в случае, если данные изменятся.