我有以下代码可以产生我想要的结果:
SELECT p.name,
p.hobby1_id, h.code, h.description,
p.hobby2_id, h2.code, h2.description
p.hobby3_id, h3.code, h3.description
FROM person p
LEFT JOIN hobby h ON h.id = p.hobby1_id
LEFT JOIN hobby h2 ON h2.id = p.hobby2_id
LEFT JOIN hobby h3 ON h3.id = p.hobby3_id
有更优化的方法吗?如果可能的话,尽量摆脱h2
和h3
。感谢
答案 0 :(得分:1)
问题似乎是设计。看起来,你的表person
有三列FK到表hobby
(hobby1_id到hobby3_id)。
这种(糟糕的)设计没有更好的方法......
但是有一个更好的结构:
table person
- personID
- name
- more columns to store further details for one specific person
table hobby
- hobbyID
- hobby
- more columns to store further details for this specific hobby
table person_hobby
- personID
- hobbyID
- Rank (if needed)
- more columns to specify details of this special mapping
这是一个经典的n:m relation
表person_hobby
定义了人与爱好之间的映射。如果需要,您可以添加一列Rank
来设置"首先"爱好超过"第二"和#34;第三"。您可以实施规则将其限制为三个,但为什么要这样做......