2014-09-04 128 views
0

我有table1Name与数据填充和table2没有数据填充。SQL语句查询

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

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

为什么会发生这种情况?

+0

举个例子,请 – mugiwaradz 2014-09-04 10:19:51

回答

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匹配fieldName的2行从表2,那么你将得到从表2从表1含有在同一行两行和两列:

示例:

表1

FieldName 
1 
2 

表2

FieldName OtherField 
1   1 
1   2 

结果JOIN

T1FieldName T2FieldName T2OtherField 
1   1   1 
1   1   2 
2   NULL  NULL 
+0

Giannis您好,我现在明白了逻辑,谢谢!您的评论非常有帮助。 – Tech 2014-09-04 10:28:54

+0

在那张纸条上百分比(%)百搭字符的用途是什么? – Tech 2014-09-04 10:34:25

+0

'LIKE'是一个运算符,用于检查两个字符串类型字段是否相似。 'LIKE'需要通配符。如果你不使用通配符,那么它实际上是一个平等运算符。 %表示“任何字符序列”,意味着%匹配任何字符的长度。 – 2014-09-04 10:38:02