我有这张桌子:
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的值。
最佳答案
使用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)
关于mysql - 如何查找不存在 key 的实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31269397/