entity
---
id name
---
1 one
2 two
3 three
property
---
id name
---
1 prop1
2 prop2
3 prop3
entity_property
---
entity_id property_id
---
1 1
1 2
1 3
2 1
我想获得至少有1和2(但可以有更多)属性的实体。选择哪里(1和2)在GROUP_CONCAT()
这是一种解决方法,我不喜欢:
SELECT entity_property.entity_id,
(GROUP_CONCAT(entity_property.property_id)) as props
FROM `entity_property`
JOIN entity
ON entity_property.entity_id = entity.id
GROUP BY entity.id
它返回:
entity_id props
---
1 1,2,3
2 1
然后我有服务器的语言爆发,然后排除。
该查询返回所有实体的行:
SELECT entity.id
FROM entity
WHERE (1 AND 2) IN
(SELECT property_id
FROM entity_property
LEFT JOIN entity
ON entity_property.entity_id = entity.id
WHERE entity_property.entity_id = entity.id)
此查询导致错误:
SELECT entity.id as ent_id
FROM entity
WHERE (1 AND 2) IN
(SELECT property_id
FROM entity_property
LEFT JOIN entity
ON entity_property.entity_id = entity.id
WHERE entity_property.entity_id = ent_id)
见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-一个非常简单的sql查询 - 但我不回答包含单词'想'的问题 - 这只是一个规则。 – Strawberry