2017-08-27 31 views
-1

我尝试了解外部连接,并且我收到了一个问题。内部连接可以有空列

假设所有列不为空,此查询后:

SELECT a.service_type_id, b.customer_member_id, a.service_name 
FROM CUSTOMER_SERVICE_TYPE a, 
    MEMBER_CUSTOMER_SERVICES b 
WHERE a.service_type_id = b.service_type_id; 

是否有可能获得空字段列的一个?

+2

您的示例查询是INNER JOIN,它将检查两个表中的service_type_id是否匹配。列上将不会有空值。如果您使用OUTER JOIN并且存在与您的条件不符的数据(a.service_type_id = b.service_type_id),那么列上将会出现空值。 –

+0

你可以检查这个链接关于JOINS https://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins –

+0

今天提示:切换到现代,明确的'JOIN'语法。易于编写(没有错误),更易于阅读(和维护),并且在需要时更容易转换为外部联接。 – jarlh

回答

2

首先,你问题的标题是“外连接”,但你的查询是内连接。

其次,查询格式不正确,使用陈旧的语法。它应该是:

SELECT cs.service_type_id, mcs.customer_member_id, cs.service_name 
FROM CUSTOMER_SERVICE_TYPE cs JOIN 
    MEMBER_CUSTOMER_SERVICES mcs 
    ON cs.service_type_id = mcs.service_type_id; 

第三,你的问题的答案是“否”。如果查询中没有任何源列是NULL,则没有列可以是NULL。如果它确实是OUTER JOIN,则列可以是NULL

注:

  • 始终使用得当,明确JOIN语法。 从不FROM条款中使用逗号。
  • 你的表别名应该是列名的缩写,而不是无意义的字母。