SQL LEFT JOIN 到一个新行

SQL LEFT JOIN to one new row

我有两个table
首先是NAMES,有ID,NAME,ACTIV
二、ALT,有ID、NAMEID、NAME

现在我离开加入第二个列以从第一个 table

中获取活动名称的替代名称
SELECT m.NAME, a.NAME FROM NAMES M LEFT JOIN ALT A ON M.ID = A.NAMEID  WHERE m.ACTIV

结果是

NAME                NAME  
User1               User1Altname1
User1               User1Altname2
User2               null

我要找的是这个

NAME
User1
User1Altname1
User1Altname2
User2

我假设顺序很重要:

SELECT altname
FROM ((SELECT m.NAME, a.NAME as altname, 1 as isalt
       FROM NAMES M JOIN
            ALT A
            ON M.ID = A.NAMEID 
       WHERE m.ACTIV
      ) UNION ALL
      (SELECT m.NAME, m.NAME, 0
       FROM NAMES m
       WHERE m.ACTIV
      )
     ) n
ORDER BY name, isalt;

想法是您需要 union all 在一个子查询中获取名称和替代名称。剩下的只是order by。实际上,仅当您不想要额外的列时才需要子查询。