2015-07-18 3 views
0

У меня есть две таблицы
Во-первых, ИМЕНА, имеет ID, NAME, Activ
Во-вторых, АЛТ, имеет ID, NameID, NAMESQL LEFT JOIN в одну новую строку

Теперь я LEFT JOIN второй Колум к получить имена альт для имен Activ из первой таблицы

SELECT m.NAME, a.NAME FROM NAMES M LEFT JOIN ALT A ON M.ID = A.NAMEID WHERE m.ACTIV 

результат IST

NAME    NAME 
User1    User1Altname1 
User1    User1Altname2 
User2    null 

Что я л ooking для этого

NAME 
User1 
User1Altname1 
User1Altname2 
User2 

ответ

1

Я предполагаю, что порядок важен:

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. Собственно, подзапрос необходим, только если вам не нужны дополнительные столбцы.

+0

нормально, thx, это работает, но я все равно получаю нуль. для этого мне понадобится время, чтобы понять, ручку и бумагу я иду :) – Garog

+0

@Garog. , , Я думаю, это потому, что 'left join' должен просто быть' join'. Я исправил ответ. –

+0

вы хороши, и очень быстро. который решил нулевую проблему, но игнорирует теперь m.ACTIV – Garog