【问题标题】:inner join can have null column内连接可以有空列
【发布时间】:2018-02-05 03:24:43
【问题描述】:

我尝试了解外部联接,但遇到了一个问题。

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

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;

是否可以在其中一列中获取空字段?

【问题讨论】:

  • 您的示例查询是 INNER JOIN,它将检查两个表中 service_type_id 的匹配。列上不会有空值。如果您使用 OUTER JOIN 并且存在与您的条件不匹配的数据 (a.service_type_id = b.service_type_id),那么列上将会有空值。
  • 你可以查看这个关于JOINS的链接stackoverflow.com/questions/17946221/…
  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。
  • 您的查询中没有 OUTER JOIN。逗号 (,) 是 CROSS JOIN(优先级低于 INNER/CROSS/OUTER JOIN),即 INNER JOIN ON 1=1。请编辑您的问题,使标题、文本和代码一致。

标签: sql null outer-join


【解决方案1】:

首先,您的问题的标题是“外部联接”,但您的查询是内部联接。

其次,查询格式错误,使用过时的语法。确实应该是:

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 子句中使用逗号。
  • 您的表别名应该是列名的缩写,而不是无意义的字母。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2013-04-17
    • 2012-05-04
    相关资源
    最近更新 更多