使用来自两个表的内部连接的无效记录
invalid records using inner join from two tables
我从 codeigniter
生成了这个 sql 语句
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 :
我只需要获取所有属性的产品,所以如果属性是3,4,5我会获取产品id = 1,如果属性是3,4,5,6我不会获取产品 ID = 1
试试这个:
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`
您的 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
我从 codeigniter
生成了这个 sql 语句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`
我有这些表格
产品:
我只需要获取所有属性的产品,所以如果属性是3,4,5我会获取产品id = 1,如果属性是3,4,5,6我不会获取产品 ID = 1
试试这个:
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`
您的 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