指定列时,SQL JOIN不返回连接表的列

时间:2016-06-09 10:25:51

标签: sql sql-server join

我正在尝试连接2个表,但是当我指定从第一个表返回哪些列时,我从连接表中得不到任何列(根本没有)。如果我选择所有" *"然后连接发生,我从连接表返回列。

SELECT E.ItemCode, E.ExtendedDescriptionKey 
FROM CI_Item As E 
LEFT JOIN CI_ExtendedDescription AS B 
ON B.ExtendedDescriptionKey = E.ExtendedDescriptionKey

以上,我只收到E(ItemCode和ExtendedDescriptionKey)中的两列

现在,如果我没有指定第一个表中的列,而是选择all:

SELECT * 
FROM CI_Item As E 
LEFT JOIN CI_ExtendedDescription AS B 
ON B.ExtendedDescriptionKey = E.ExtendedDescriptionKey

我收到了整个CI_Item表和JOIN表。唯一的区别是我选择了所有列。

我只是不明白为什么会这样。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果您没有从表B中选择任何字段,那么它将不会在SELECT语句中显示任何字段。

如果您愿意,可以SELECT *只使用一个表的别名;

SELECT E.* 
FROM CI_Item As E 
LEFT JOIN CI_ExtendedDescription AS B 
ON B.ExtendedDescriptionKey = E.ExtendedDescriptionKey

这将返回所有字段但仅针对表E,您可以指定表B中您想要的任何字段;

SELECT 
E.*
,B.Field1
.B.Field2 
FROM CI_Item As E 
LEFT JOIN CI_ExtendedDescription AS B 
ON B.ExtendedDescriptionKey = E.ExtendedDescriptionKey

当然,如果没有匹配的数据,表B中的列中会有NULL个值。