我有以下表格:
CREATE TABLE `productattributes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) DEFAULT NULL,
`attribute_id` int(11) DEFAULT NULL,
`value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
示例数据:
id product_id attribute_id value
651048 81546 132 0
651049 81546 133 1440
651050 81546 134 1440
707380 81546 136 1088
674291 84645 132 0
674292 84645 134 70560
674293 84645 133 144
674294 84645 136 2058
674295 84645 137 SS34
674296 84645 142 213
674297 84645 147 AB
674298 84645 154 F
我想知道product_id何时没有设置attribute_id“136”。 从上面的示例数据中,两个产品都将attribute_id“136”设置为某个值。
如果一个产品没有此属性,则attribute_id甚至不存在(未设置为NULL)。 像这样:
1 5000 132 0
2 5000 133 1440
3 5000 134 1440
如何查询此表以了解哪些产品没有attribute_id
136设置为任何值?
到目前为止我做了什么?
SELECT DISTINCT * FROM sbb.productattributes
WHERE EXISTS(attribute_id = 136) ORDER BY product_id LIMIT 100000
这样的事情。但我知道你必须在EXIST()语句中使用第二个SELECT查询。但对我来说,一切都在一张桌子里。
一个完美的结果是(从上面的示例数据中)看到product_id 5000没有attribute_id 136的值。我不想看到其他产品,因为它们确实具有attribute_id 136的值。 / p>
答案 0 :(得分:1)
使用NOT EXISTS
排除所有具有attribute_id = 136的产品:
select *
from productattributes p1
where not exists (select 1 from productattributes p2
where p1.product_id = p2.product_id
and p2.attribute_id = 136)