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