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
。实际上,仅当您不想要额外的列时才需要子查询。
我有两个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
。实际上,仅当您不想要额外的列时才需要子查询。