(SQL)同一个表上的多个连接 - 更优化的方式?

时间:2016-12-12 08:57:45

标签: sql join

我有以下代码可以产生我想要的结果:

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

有更优化的方法吗?如果可能的话,尽量摆脱h2h3。感谢

1 个答案:

答案 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;第三"。您可以实施规则将其限制为三个,但为什么要这样做......