我需要帮助,我必须对连接表有一些基本的误解。我有3个表格,'item','property','propvalues' 我尝试列举颜色为黑色或灰色,而形状为圆形的项目,例如。 (我的表是比较复杂的,我只是试图让简单的现在。)Mysql查询连接表问题
item
id category_id
1 1
2 1
3 2
4 3
property
id name
1 'shape'
2 'color'
propvalues
id property_id item_id value
1 1 1 'round'
2 2 1 'grey'
3 1 2 'round'
4 2 2 'black'
5 1 3 'square'
6 2 3 'black'
我有这个疑问:
SELECT item.id FROM item
JOIN propvalues ON item.id=propvalues.item_id
WHERE item.category_id IN (1,2) &&
propvalues.value IN ('black','grey') AND propvalues.value IN ('round')
,但是这给了我没有结果,而它应该输出项目id 1和2 (因为它们都是圆的,其中一个是灰色的,另一个是黑色的。) (我也想在where子句中包含property_id,因为后面不同的属性可能有相同的propvalues.value,所以实际上where子句将如下所示:)
WHERE item.category_id IN(1,2) &&
(propvalues.property_id = 2 && propvalues.value IN ('black','grey')) &&
(propvalues.property_id = 1 && propvalues.value IN ('round'))
有人能告诉我为什么不给我想要的结果吗?请解释我什么是对
你为什么要使用像 propvalues.value IN(“黑”,“灰色”)AND propvalues.value IN('round')??? 您应该使用 propvalues.value IN('black','gray','round') –
因为这种情况下,我会列出每件黑色或灰色或圆形的物品。但我想要的只是那些圆形的,黑色的或灰色的。另外,因为未来如果我拥有像('内部尺寸'和'外部尺寸')这样的属性并且属性值对于两者都是相同的,例如内部尺寸:25毫米,外部尺寸:25毫米,比我会得到不好的结果。 – Ninet9
显示您想要的输出。 – denny