加入自己的任务

时间:2014-04-20 14:31:27

标签: sql join

我有这样的表:

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

我做错了什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

通过使用WHERE T1.TIPO = 1 AND T2.TIPO = 2条款,您需要在T2中找到匹配的记录,因此实际上您将left join转换为inner join。< / p>

为了包含来自T1的{​​{1}}中没有匹配记录的记录,您可以将T2子句更改为

where

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