同一 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。等等。
也许您不应该在关系数据库中执行此类查询,而应该在数据仓库或支持分面的索引搜索引擎中执行。
我正在尝试获取具有特定属性的零件。每个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。等等。
也许您不应该在关系数据库中执行此类查询,而应该在数据仓库或支持分面的索引搜索引擎中执行。