SQL查询使用内部联接,子查询为0行

时间:2015-09-18 14:25:23

标签: sql join subquery correlated-subquery

在我的查询中,我选择了一个不存在的列,因为此列来自连接中的子查询。 (子查询可以给我0行)

因此,在这种情况下,我想选择0而不是“temp.Quantity”列。

代码:

SELECT
    bx.BX_BoxNum,
    temp.Quantity    -- <- this column
FROM BOX bx
INNER JOIN (SELECT BX_Id, SUM(BX_Quantity) AS Quantity FROM BOX
            WHERE BX_Top_S = 'True' GROUP BY BX_Id) temp
    ON bx.BX_Id = temp.BX_Id
WHERE bx.BX_BoxNum = 10

有时候一个盒子号是空的!我尝试使用“BOX n°10 - 0”而不是“

你能帮我吗?

2 个答案:

答案 0 :(得分:0)

SELECT bx.BX_BoxNum, ISNULL(temp.Quantity, 0)
FROM BOX bx
left outer JOIN (SELECT BX_Id, SUM(BX_Quantity) AS Quantity FROM BOX 
WHERE BX_Top_S = 'True' GROUP BY BX_Id) temp ON bx.BX_Id = temp.BX_Id
WHERE bx.BX_BoxNum = 10

外连接允许在连接的一侧不返回任何内容时进行选择。内连接必须在连接的两侧都有行(如您所见!)。 Google了解LEFT,RIGHT和FULL Outer连接之间的差异。

答案 1 :(得分:0)

SELECT bx.BX_BoxNum, SUM(COALESCE(temp.Quantity, 0)) AS Quantity
FROM BOX bx
    LEFT JOIN BOX temp ON bx.BX_Id = temp.BX_Id AND temp.BX_Top_S = 'True'
WHERE bx.BX_BoxNum = 10
GROUP BY bx.BX_BoxNum