同一 table 列上的多个 WHERE 条件

Multiple WHERE conditions on the same table columns

我正在尝试获取具有特定属性的零件。每个part有很多属性,每个attribute有一个attributeheader。所以我需要使用三个表。

SELECT * FROM Part p 
LEFT JOIN p.attributes pa
JOIN pa.attributeheader pah
WHERE (sph.name = 'size' AND sp.value IN ('11')) 
AND (sph.name = 'colour' AND sp.value IN ('Black'))

这returns没什么,因为我在 JOIN 的某处出错了,或者缺少分组。我正在尝试 select 具有这两个属性的部分,因此使用 OR 不是解决方案。我不太清楚如何解决这个问题 - 使用原始 MySQL 我会在连接上使用别名。

WHERE (sph.name = 'size' AND sp.value IN ('11'))
AND (sph.name = 'colour' AND sp.value IN ('Black'))

等同于

WHERE sph.name = 'size' AND sp.value IN ('11') 
AND sph.name = 'colour' AND sp.value IN ('Black')

当然 sph.name 不能同时等于 'size' 和 'colour',因此你永远不会从这个 SELECT 中得到任何行.

您需要加入属性 table 两次。

大致是这样的:

SELECT * FROM (Part p 
LEFT JOIN p.attributes pa
JOIN pa.attributeheader pah)
LEFT JOIN p.attributes pa2
JOIN pa.attributeheader pah2

并且您需要在 WHERE 子句中为值添加前缀 pa。或 pa2。等等。

也许您不应该在关系数据库中执行此类查询,而应该在数据仓库或支持分面的索引搜索引擎中执行。