Неверные записи с использованием внутреннего соединения из двух таблиц

У меня есть это заявление SQL, сгенерированный из codeigniter

SELECT * FROM (`products`) LEFT JOIN `products_attributes` ON `products_attributes`.`product_id` = `products`.`id` WHERE `products`.`category` = '1' AND `products`.`sub_category` = '1' AND `products_attributes`.`attribute_id` = '3' AND `products_attributes`.`attribute_id` = '4' AND `products_attributes`.`attribute_id` = '5' GROUP BY `products`.`id`

и у меня есть эти таблицы

товары:products_attributes:

Мне нужно получить продукты только со всеми атрибутами, поэтому я получу идентификатор продукта = 1, если атрибуты 3,4,5, а если атрибуты 3,4,5,6, я не получу идентификатор продукта = 1

2 ответа

Решение

Ваш SQL-запрос совершенно неверный. Что вы сделали: Дайте мне запись attribute_id = 3 AND attribute_id = 4 AND attribute_id = 5 AND attribute_id = 6. Одна строка не может быть равна 3 и 4 одновременно. То, что вам нужно, может быть достигнуто разными способами. Например:

SELECT
    products.id
FROM  products

    JOIN products_attributes ON products_attributes.product_id = products.id
WHERE
    products.category = '1'
    AND `products_attributes`.`attribute_id` IN (3,4,5,6)


GROUP BY
    products.id
HAVING COUNT(DISTINCT `products_attributes`.`attribute_id`) = 4

Если вы укажете просто IN..., тогда будут приняты все записи, у которых есть хотя бы 1 такой attribute_id

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

SELECT * FROM (`products`) 
LEFT JOIN `products_attributes` 
ON `products_attributes`.`product_id` = `products`.`id` 
WHERE `products`.`category` = 1 
AND `products`.`sub_category` = 1 
AND `products_attributes`.`attribute_id` IN (3, 4, 5) 
GROUP BY `products`.`id`
Другие вопросы по тегам