Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加入自己的探索_Sql_Join - Fatal编程技术网

Sql 加入自己的探索

Sql 加入自己的探索,sql,join,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 Nul

我有这样的桌子:

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

我做错了什么?

将此代码用于联接表本身:

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
这就行了

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

查看此处的演示

通过使用子句
其中T1.TIPO=1和T2.TIPO=2
,您需要在
T2
中找到匹配的记录,因此实际上您正在将
左连接
转换为
内部连接

为了将
T1
中的记录包括在
T2
中没有匹配记录的记录,您可以将
where
子句更改为

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

其中T1.TIPO=1和T2.TIPO 1

Ok,但字段“Tipo”不像ID那样建立关系,“Tipo”是通知其他类型数据的字段。这就像我有两个表:第一个表的Tipo=1,第二个表的Tipo=2ok,我编辑答案,我认为回答对你来说是正确的。你传递的第一个查询没有得到预期的结果,但第二个是完美的。非常感谢。
WHERE T1.TIPO = 1 AND T2.TIPO <> 1