我有table1Name,填充了数据,table2没有填充数据。
select * from [database1Name].dbo.table1Name
join [database1Name].dbo.table2Name
on [database1Name].dbo.table1Name.fieldName like value;
运行上面的sql语句后,它会加入表,但不会显示表'table1Name'中的任何填充数据。
为什么会这样?
答案 0 :(得分:5)
使用JOIN
INNER JOIN
表示它只会获取条件匹配的数据。因此,如果第二个表没有数据,则永远不会满足条件,因此您不会得到任何数据。
在您的情况下,您需要LEFT JOIN
。这将获得左表中的所有行(在您的情况下为table1Name)以及满足条件时右表中的相应值。
SELECT *
FROM [database1Name].dbo.table1Name
LEFT JOIN [database1Name].dbo.table2Name
ON [database1Name].dbo.table1Name.fieldName like [database1Name].dbo.table2Name.fieldName;
只是提到使用连接意味着您可能会从特定表中多次获得一行。例如,因为您有一个LIKE
条件,如果表1的fieldName
与表2中的2行中的fieldName匹配,那么您将得到两行,其中包含表1中的相同行和表2中的两行:
示例:
<强>表1 强>
FieldName
1
2
<强>表2 强>
FieldName OtherField
1 1
1 2
LEFT JOIN的结果
T1FieldName T2FieldName T2OtherField
1 1 1
1 1 2
2 NULL NULL