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