Oracle查询不返回空值

时间:2015-05-22 10:55:54

标签: sql oracle

我希望以下查询返回空行,其中使用左连接时WEBSITE_URL表中没有匹配的行。 所以我想看到的是URLTYPE表中的所有url类型以及WEBSITE_URL表中的任何匹配记录。

SELECT
    WU.NC_WEBSITE_ID_FK,
    WU.TC_URL,
    UT.TC_URLTYPE_NAME
  FROM
    WEBSITE_URL WU,
    URLTYPE UT
  WHERE
    WU.NC_URL_TYPE_ID_FK(+) = UT.NC_URLTYPE_ID
  AND
    NC_WEBSITE_ID_FK = '1622'

这是输出:

1622    http://www.test.com                 PRODUCTION (PUBLIC)

1622    http://preprod.test.com             PREPRODUCTION

1622    http://review.test.com              REVIEW

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
    WU.NC_WEBSITE_ID_FK,
    WU.TC_URL,
    UT.TC_URLTYPE_NAME
  FROM
    URLTYPE UT
  LEFT JOIN 
    WEBSITE_URL WU ON WU.NC_URL_TYPE_ID_FK = UT.NC_URLTYPE_ID
               AND WU.NC_WEBSITE_ID_FK = '1622'

答案 1 :(得分:1)

使用标准连接类型(在本例中为外部或左侧),而不是仅使用旧的SQL语法

SELECT WU.NC_WEBSITE_ID_FK, WU.TC_URL, UT.TC_URLTYPE_NAME
FROM URLTYPE UT
FULL OUTER JOIN WEBSITE_URL WU ON UT.NC_URLTYPE_ID = WU.NC_URL_TYPE_ID_FK(+)
WHERE NC_WEBSITE_ID_FK = '1622'

答案 2 :(得分:0)

首先,学习使用显式join语法。很少有人真正理解旧的Oracle语法。

其次,在所有列上使用表别名。

如果NC_WEBSITE_ID_FK来自WEBSITE_URL,则需要将条件移至ON子句:

SELECT WU.NC_WEBSITE_ID_FK, WU.TC_URL, UT.TC_URLTYPE_NAME
FROM URLTYPE LEFT JOIN
     WEBSITE_URL WU
     ON WU.NC_URL_TYPE_ID_FK = UT.NC_URLTYPE_ID AND
        NC_WEBSITE_ID_FK = '1622';

此外,如果NC_WEBSITE_ID_FK是数字,请不要将常量值放在单引号中。对于人和优化器来说,混合数据类型会产生误导。