2014-04-20 6 views
0

У меня есть таблица вроде этого:Присоединяйтесь к себе квест

ID DADOS TIPO 
1 UM 1 
2 DOIS 1 
3 TRES 1 
4 QUATRO 1 
5 CINCO 1 
1 SEIS 2 

мне нужно сделать выбор, что это вернуть:

t1.id t1.dados t2.dados 
1  Um  Seis 
2  Dois  Null 
3  Tres  Null 
4  Quatro Null 
5  Cinco Null 

Я попытался в таком виде:

SELECT T1.ID, T1.DADOS, T2.DADOS 
FROM Tabela1 as T1 LEFT JOIN Tabela1 AS T2 ON T1.ID = T2.ID 
WHERE T1.TIPO = 1 AND T2.TIPO = 2 

Но результатом является следующее:

ID T1.DADOS T2.DADOS 
1 UM SEIS 

Что я делаю неправильно?

ответ

0

использовать этот код для присоединиться к самой таблице:

SELECT T1.ID, T1.DADOS, T2.DADOS 
FROM Tabela1 as T1 LEFT JOIN Tabela1 AS T2 ON T1.ID = T2.ID 
              And T1.TIPO = 1 AND T2.TIPO = 2 

также вы можете использовать этот код:

SELECT T1.ID, T1.DADOS, T2.DADOS 
FROM 
    (select * from Tabela1 T_1 
    where T_1.TIPO = 1) as T1 
    LEFT JOIN 
    (select * from Tabela1 T_2 
    Where T_2.TIPO = 2) AS T2 ON T1.ID = T2.ID 
+0

Хорошо, но поле «типо» не похоже на идентификатор, чтобы сделать отношение, «Tipo» - это поле, которое информирует другие типы данных. Это похоже на две таблицы: первая таблица с Tipo = 1 и вторая таблица с Tipo = 2 –

+0

ok, я редактирую ответ, и я думаю, что ответ правильный для вас. – Iraj

+0

Первый запрос, который вы передали, не приносит ожидаемого результата, но второй является идеальным. Спасибо!! –

0

Это сделает работу

SELECT T1.ID, T1.DADOS as T1Dados, T2.DADOS as T2Dados 
FROM Tabela1 T1 
left JOIN Tabela1 T2 
ON T1.ID = T2.ID 
and T1.TIPO = 1 and T2.TIPO = 2 

Смотрите демо здесь http://sqlfiddle.com/#!2/c7066/6

0

Используя пункт WHERE T1.TIPO = 1 AND T2.TIPO = 2, вам требуется, чтобы соответствующая запись находилась в T2, и, таким образом, в действительности вы поворачиваете left join в inner join.

Для включения записи из T1, которые не имеют соответствующей записи в T2, вы можете изменить положение where либо

WHERE T1.TIPO = 1 AND (T2.TIPO IS NULL OR T2.TIPO = 2) 

или

WHERE T1.TIPO = 1 AND T2.TIPO <> 1 
Смежные вопросы