@tempman

Какой SQL-select: MySQl выборка один-ко-многим с объединением?

Помогите с запросом SQL:

Задача:

Есть таблица (id, tovar_id, data) связь один ко многим, т.е. у tovar_id может быть несколько значений data, где каждое значение записывается в виде отдельной записи

Надо:
Составить выборку - вывести список tovar_id, где ОДНОВРЕМЕННО нексолько разных значений data (по списку). Т.е. не список всех записей по каждому входжению значения data, а список tovar_id, где ОДНОВРЕМЕННО встречаются ВСЕ перечисленные значения data
Т.е. надо не по отдельности data 6 или 7, а только те tovar_id, где есть запись и для data 6 и для data 7, т.е. не показывать tovar_id, где есть data 6, а нет data 7

Как правильно составить запрос?
  • Вопрос задан
  • 1936 просмотров
Решения вопроса 2
longclaps
@longclaps
SELECT A.tovar_id FROM `таблица` AS A
                  JOIN `таблица` AS B
    ON A.tovar_id = B.tovar_id
    WHERE A.data = "data6" AND B.data = "data7";
Ответ написан
Комментировать
@Vlad_fox
я бы делал так -
SELECT A.tovar_id,  -- нужный нам ид товара
             count( distinct A.data)  -- кол-во уникальных значений data для каждого товара
FROM `таблица` AS A
    WHERE A.data in ( "data6",  "data7" )  -- сюда перечисляем нужный нам набор значений data
group by A.tovar_id
having count( distinct   A.data) = 2 -- кол-во елементов нужного нам набор значений data

условие WHERE отсеет те товары, в которых нет ни одного нужного значения data вообще
а having отсеет те товары, в которых меньшее кол-во "одновременных" входжений data
если в списке одновременных значений не 2 а 3, 4 .. значения, то надо добавлять их в список и править число в последнем условии having
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы