我希望以下查询返回空行,其中使用左连接时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
答案 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
是数字,请不要将常量值放在单引号中。对于人和优化器来说,混合数据类型会产生误导。