SQL语句查询

时间:2014-09-04 10:17:55

标签: sql sql-server

我有table1Name,填充了数据,table2没有填充数据。

select * from [database1Name].dbo.table1Name 
join [database1Name].dbo.table2Name 
on [database1Name].dbo.table1Name.fieldName like value;

运行上面的sql语句后,它会加入表,但不会显示表'table1Name'中的任何填充数据。

为什么会这样?

1 个答案:

答案 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