SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.12.2016 11:13:07

Rigano
Участник
Зарегистрирован: 20.12.2016
Сообщений: 2

Подскажите, пожалуйста. Объединение по определенному полю.

Есть таблица tags_products,  в ней поля id,`product_id`,`tag_id`. Нужно выбрать все записи, где
`tag_id` = '2' и `tag_id` = '5' и (`tag_id` = n ...). Важно увидеть все product_id, где все эти условия присутствуют. Пробовала:

(SELECT * FROM tags_products WHERE tag_id=2 ORDER BY product_id DESC LIMIT 1)
UNION ALL
(SELECT * FROM tags_products WHERE tag_id=5 ORDER BY product_id DESC LIMIT 1)
ORDER BY `product_id`

Но получается разные значения product_id.
Помогите, пожалуйста, с запросом, товарищи.

Неактивен

 

#2 20.12.2016 11:20:13

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Подскажите, пожалуйста. Объединение по определенному полю.

SELECT *
FROM table  t1
  JOIN table t2 on t1.product_id=t2.product_id
  JOIN table t3 ON t2.product_id=t3.product_id
WHERE t1.tag_id =2 and  t2.tag_id=5 AND t3.tag_id = n;

Неактивен

 

#3 20.12.2016 11:24:27

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Подскажите, пожалуйста. Объединение по определенному полю.

Или еще вариант

SELECT product_id, count(*) Cnt
FROM table
WHERE tag_id in (2,5, ...)
GROUP BY 1
HAVING Cnt=3 -- количество значений в IN

Неактивен

 

#4 20.12.2016 11:32:17

Rigano
Участник
Зарегистрирован: 20.12.2016
Сообщений: 2

Re: Подскажите, пожалуйста. Объединение по определенному полю.

Второй вариант просто великолепен, благодарю!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson