Mysql 从同一个表连接多行

Mysql 从同一个表连接多行,mysql,join,Mysql,Join,我正在尝试查询具有这种类型结构的数据库 table1 ID -> int name -> varchar table2 ID -> int name1 -> int name2 -> int name3 -> int 其中名称1到3是表1 ID。表2的每一行可以有1到3行与之关联的表1,重要的是,ID可以重复(例如:name1和name3可以相同)。保证按顺序填写字段(即:如果name2为空,则name3也将为空) 我这样查询数据库,以获取与3列中的I

我正在尝试查询具有这种类型结构的数据库

table1

ID -> int
name -> varchar

table2

ID -> int
name1 -> int
name2 -> int
name3 -> int
其中名称1到3是表1 ID。表2的每一行可以有1到3行与之关联的表1,重要的是,ID可以重复(例如:name1和name3可以相同)。保证按顺序填写字段(即:如果
name2
为空,则
name3
也将为空)

我这样查询数据库,以获取与3列中的ID相关联的字符串:

SELECT t2.ID, t1a.name n1, t1b.name n2, t1c.name n3   
FROM table2 t2
LEFT JOIN table1 t1a on t2.name1 = t1a.ID,
LEFT JOIN table1 t1b on t2.name2 = t1b.ID,
LEFT JOIN table1 t1c on t2.name3 = t1c.ID
我想知道是否有一种方法可以做到这一点,只做一个左连接,或者您是否可以建议一个更好的表设计策略来实现这一点


谢谢

您是否在结构(或查询)中混淆了
表1
表2
<代码>表2没有列
名称
,连接看起来backwards@TheScrum Meister:哦,对不起,我正在纠正它!我纠正了这些问题。对不起,实际的表结构要复杂得多,我试图尽可能地简化问题,而复制/粘贴是邪恶的…:p由于问题的一般性,确实没有简单的方法来建议更好的设计。这类似于询问如何最好地创建用于存储小部件和dohickeys的设计。
Select T1.ID
    , Min( Case When Z.ColNum = 1 Then Z.Name End ) As n1
    , Min( Case When Z.ColNum = 2 Then Z.Name End ) As n2
    , Min( Case When Z.ColNum = 3 Then Z.Name End ) As n3
From Table1 As T1
    Left Join   (
                Select ID, 1 As ColNum, name1 As Name 
                From Table2 
                Where name1 Is Not Null
                Union All 
                Select Id, 2, name2 
                From Table2 
                Where name2 Is Not Null
                Union All 
                Select Id, 3, name3 
                From Table2 
                Where name3 Is Not Null
                ) As Z
        On Z.ID = T1.ID
Group By T1.ID