当一个表的记录通过另一个表中的列组合彼此复杂地关联时,我有一个有趣的情况。
我有entity
个桌子
entity_id | owner_id | title | entity_type |
--------------------------------------------
1 | 3 | some title 1 | supertype
2 | 2 | some title 2 | supertype
3 | 2 | some title 3 | supertype
4 | 5 | title 1 | type_1
5 | 5 | title 2 | type_2
6 | 5 | title 3 | type_3
然后我还有另一个表,用于存储键值样式的各种属性
表entity_properties
:
property_id | entity_id | property_key | property_value
112 | 1 | identifier | type_1
124 | 2 | identifier | type_2
146 | 3 | identifier | type_3
634 | 1 | is_cool | 0
135 | 2 | is_cool | 1
23 | 3 | is_cool | 1
现在,我要选择的实体具有类型为type_1
,type_2
,type_3
的实体类型,并且还具有{{1 }}会显示实体property_value
的参数,该实体的entity_properties
= is_cool
的property_value与我从property_key
表中查找的项目的实体类型相匹配。
所需结果:
identifier
几天来我一直在b撞我的头,这是无法正常工作的最佳近似值...
entity
答案 0 :(得分:1)
看起来像是您的数据设置方式,您的查询仅适用于实体ID 1、2和3,因为第二个entity_properties表的entity_id列中没有4、5、6。如果您选择加入property_id,那么您应该会找到所需的内容,尽管根据数据库的设计方式,这可能并不正确。
SELECT
sought.*,
entity_properties.property_value
FROM
entity AS sought
INNER JOIN
entity AS entity_type
JOIN
entity_properties AS properties
ON
properties.property_id = entity_type.entity_id
WHERE
sought.owner_id = 5 AND sought.entity_type IN(
'type_1',
'type_2',
'type_3')
AND properties.property_key = 'is_cool'
答案 1 :(得分:1)
您可以在entity_properties上使用两个联接
select e.entity_id, e.owner_id, e.title, e.entity_type, p2.property_value
from entity e
inner join entity_properties p1 on e.entity_type = p1.property_value
and p1.property_key ='indentifier'
inner join entity_properties p2 on p1.entity_id = p2.entity_id
and p2.property_key ='is_cool'