我遇到MySQL连接问题,在第一个嵌套的Select查询中偶尔没有实现连接条件,这会导致此查询产生完整的NULL结果。
有人可以告诉我究竟发生了什么吗?无论第一个嵌套选择查询中是否满足join语句的条件,我打算从查询中获取一个值。
SELECT
(
SELECT SUM(amount)
FROM
package_orders
JOIN packages_products
ON package_orders.package_id = package_orders.package_id
WHERE
quote_id =1
AND rev =1
)
+
(
SELECT SUM(amount)
FROM
orders
WHERE
quote_id =1
AND rev =1
)
AS quote_total
谢谢!
答案 0 :(得分:1)
NULL+1
仍为NULL
,因此您必须将第一个SELECT
与IFNULL(expr1, 0)
包装在一起,如下所示:
SELECT IFNULL((
SELECT SUM(amount)
FROM package_orders
JOIN packages_products ON package_orders.package_id = package_orders.package_id
WHERE quote_id =1
AND rev =1
),0)
+
(
SELECT SUM(amount)
FROM orders
WHERE quote_id =1
AND rev =1
)
AS quote_total
答案 1 :(得分:1)
我发现了两个潜在的问题。
如果您的问题只是从packages_products上的package_orders加入返回null,您是否可能正在寻找外部联接?即使没有匹配的package_products,外连接也会返回package_orders。
SELECT (
SELECT SUM(amount)
FROM package_orders
LEFT JOIN packages_products ON package_orders.package_id = package_orders.package_id
WHERE quote_id =1
AND rev =1
...
或者你的问题是第二个值查询
...
SELECT SUM(amount)
FROM orders
WHERE quote_id =1
AND rev =1
...
导致整个事物为空?这是因为数字+ null = null。因此,如果第二个查询可能返回null,则需要处理该情况并返回零。
...
IFNULL((SELECT SUM(amount)
FROM orders
WHERE quote_id =1
AND rev =1), 0)
...
希望这有帮助