在子查询不为空的情况下获得 Mysql 个结果
Getting Mysql results where subquery is not null
我正在处理一个将使用子查询获取项目计数的查询,其中两个子查询的结果都不为空。
我有这个问题
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B'
产生这个:
id | shipped | unshipped
1500 | NULL | 2
1501 | NULL | 1
1502 | NULL | 1
1503 | 1 | 2
1504 | 2 | NULL
1505 | 2 | 5
我只想要已发货和未发货的结果具有正值。我尝试了几种方法,例如
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S' HAVING SUM(qty) > 0) AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B') HAVING SUM(qty) > 0) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B'
和
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B' AND (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') IS NOT NULL AND (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) IS NOT NULL
两者仍然return相同的结果。
我创建了一个数据库 Fiddle,但它显示没有找到结果,我 运行 通过 MySql 使用相同的代码并且它 return 所有项目
我不是任何 strech 的 SQL 专家,但似乎这应该有效。
SELECT s.id,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND status = 'S'
) AS shipped,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND (status = 'A' OR status = 'B')
) AS unshipped
FROM `sales` s
WHERE (s.status = 'A' OR s.status = 'B') and
shipped is not Null and
unshipped is not null
根据@Arganas 的回答,您可以使用HAVING
SELECT s.id,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND status = 'S'
) AS shipped,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND (status = 'A' OR status = 'B')
) AS unshipped
FROM `sales` s
WHERE (s.status = 'A' OR s.status = 'B')
HAVING shipped is not Null and unshipped is not null
这是fiddlehttps://www.db-fiddle.com/f/mHuQ4nCHZVPmEacog1iQvq/1
SELECT IFNULL(SUM(qty),0) ....
我正在处理一个将使用子查询获取项目计数的查询,其中两个子查询的结果都不为空。
我有这个问题
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B'
产生这个:
id | shipped | unshipped
1500 | NULL | 2
1501 | NULL | 1
1502 | NULL | 1
1503 | 1 | 2
1504 | 2 | NULL
1505 | 2 | 5
我只想要已发货和未发货的结果具有正值。我尝试了几种方法,例如
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S' HAVING SUM(qty) > 0) AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B') HAVING SUM(qty) > 0) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B'
和
SELECT s.id, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') AS shipped, (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) AS unshipped FROM `sales` s WHERE s.status = 'A' OR s.status = 'B' AND (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND status = 'S') IS NOT NULL AND (SELECT SUM(qty) FROM salesItems WHERE sale_id = s.id AND (status = 'A' OR status = 'B')) IS NOT NULL
两者仍然return相同的结果。
我创建了一个数据库 Fiddle,但它显示没有找到结果,我 运行 通过 MySql 使用相同的代码并且它 return 所有项目
我不是任何 strech 的 SQL 专家,但似乎这应该有效。
SELECT s.id,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND status = 'S'
) AS shipped,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND (status = 'A' OR status = 'B')
) AS unshipped
FROM `sales` s
WHERE (s.status = 'A' OR s.status = 'B') and
shipped is not Null and
unshipped is not null
根据@Arganas 的回答,您可以使用HAVING
SELECT s.id,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND status = 'S'
) AS shipped,
(
SELECT SUM(qty)
FROM salesItems
WHERE sale_id = s.id AND (status = 'A' OR status = 'B')
) AS unshipped
FROM `sales` s
WHERE (s.status = 'A' OR s.status = 'B')
HAVING shipped is not Null and unshipped is not null
这是fiddlehttps://www.db-fiddle.com/f/mHuQ4nCHZVPmEacog1iQvq/1
SELECT IFNULL(SUM(qty),0) ....