如果条件不是真SQL,如何显示记录但在结果中显示值为0

时间:2017-03-15 12:09:16

标签: sql oracle oracle11g

我有这样的查询

SELECT 
    TA.MOBILE_NUMBER, 
    TA.AMOUNT, 
    TA.REFERENCEID, 
    TB.KEYCOST 
FROM TABLEA TA
LEFT JOIN TABLEB TB ON TA.REFERENCEID = TB.REFERENCEID
WHERE TA.STATUS = 0
  AND TB.ALIAS = 'KEYCOST'

有些referenceid's tableAALIAS = 'KEYCOST'中有一个tableb条目,但有些referenceid's没有ALIAS = 'KEYCOST'的任何条目。

我希望referenceid's显示tableAKEYCOSTTableB referenceid的所有TableA。如果KEYCOST中的KEYCOST没有任何Reset,则结果应包含该数据,但在0列中显示为0.

请有人在这里帮助我。 谢谢

3 个答案:

答案 0 :(得分:2)

将连接条件移动到ON语句,对于简单的NVL应该有用的NULL值,如果第一个值为null,它将显示第二个值。像这样:

SELECT TA.MOBILE_NUMBER, TA.AMOUNT, TA.REFERENCEID, NVL(TB.KEYCOST,0) KEYCOST FROM TABLEA TA
LEFT JOIN TABLEB TB
ON TA.REFERENCEID = TB.REFERENCEID AND TB.ALIAS = 'KEYCOST'
WHERE TA.STATUS = 0

答案 1 :(得分:1)

使用LEFT JOIN时, second 表中的条件需要进入ON子句:

SELECT TA.MOBILE_NUMBER, TA.AMOUNT, TA.REFERENCEID, TB.KEYCOST
FROM TABLEA TA LEFT JOIN 
     TABLEB TB
     ON TA.REFERENCEID = TB.REFERENCEID AND TB.ALIAS = 'KEYCOST'
WHERE TA.STATUS = 0;

否则,NULL生成的LEFT JOIN值会被过滤掉。

如果您需要0而不是NULL,请使用COALESCE()。目前尚不清楚您指的是哪一列。

答案 2 :(得分:0)

如果您真的想要显示referenceid'stableA的所有KEYCOSTTableB referenceid。如果TableA中的KEYCOST没有任何0,则结果应包含该数据,但会在KEYCOST列中显示SELECT TA.MOBILE_NUMBER, TA.AMOUNT, TA.REFERENCEID, NVL(TB.KEYCOST, 0) KEYCOST FROM TABLEA TA LEFT JOIN TABLEB TB ON TA.REFERENCEID = TB.REFERENCEID AND TB.ALIAS = TA.ALIAS WHERE TA.STATUS = 0 AND TA.ALIAS = 'KEYCOST' 。< / p>

SELECT

根据您的解释,您想要ALIAS = KEYCOST tableA数据,因此我们必须保持AND的条件并添加join ALIAS source /etc/environment列{。}}。