Mysql 不存在行的SQL联接
我有以下查询,但它只提取两个表中存在的记录。如果表_中不存在记录,我如何修改它以使其仍然可以提取Mysql 不存在行的SQL联接,mysql,sql,sql-server,postgresql,Mysql,Sql,Sql Server,Postgresql,我有以下查询,但它只提取两个表中存在的记录。如果表_中不存在记录,我如何修改它以使其仍然可以提取 SELECT Col_1 , Col_2 - Sold AS Remaining_Stock FROM Table_1 JOIN ( SELECT Col_3 , SUM(Col_2) AS Sold FROM Table_2 GROUP
SELECT Col_1 ,
Col_2 - Sold AS Remaining_Stock
FROM Table_1
JOIN ( SELECT Col_3 ,
SUM(Col_2) AS Sold
FROM Table_2
GROUP BY Col_3
) AS Table_Sold ON Table_1.Col_1 = Table_Sold.Col_3
AND Col_2 > Sold
您应该使用左联接而不是常规联接
这将是一种左联情况
SELECT Col_1, Col_2 - Sold as Remaining_Stock
FROM Table_1
LEFT JOIN (
SELECT Col_3, SUM(Col_2) as Sold
FROM Table_2 GROUP BY Col_3) as Table_Sold
ON Table_1.Col_1 = Table_Sold.Col_3 AND Col_2 > Sold
我试过这个。这将从表中提取所有具有空值的记录。我只想要有剩余存货的唱片,这不是你要的。但是如果我正确理解了你的评论,那么更新后的答案应该可以解决这个问题。使用左联接可以获得第一个表中的所有行以及联接表中的相应行。联接表中缺少的行将获取空值,这将打乱您的选择列表,因此您应该在“已售出”字段中用0替换空值。这是用于哪个rdbms的?你标记了三个不同的。
SELECT Col_1, Col_2 - Sold as Remaining_Stock
FROM Table_1
LEFT JOIN (
SELECT Col_3, SUM(Col_2) as Sold
FROM Table_2 GROUP BY Col_3) as Table_Sold
ON Table_1.Col_1 = Table_Sold.Col_3 AND Col_2 > Sold
SELECT p.id, a.qty - ifnull(o.qty,0) remaining_stock
FROM products p
LEFT JOIN (
SELECT product_id, sum(qty) qty
FROM orders
GROUP BY 1
) o ON p.id = o.product_id
WHERE a.qty > o.qty