SQL与左连接显示为0的

问题描述:

我现在有一个SQL查询的设置,但我希望它忽略0的在min_on_hand列值,而我似乎无法找出为什么这不起作用SQL与左连接显示为0的

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    WHERE 
     sku_master.min_on_hand > 0 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku; 
+0

你的意思是你不希望显示与min_on_hand =记录0? – RezaRahmati 2015-04-01 13:23:39

+2

它看起来像你的唯一的左连接,如果他们是> 0,而不是过滤最终结果。您可以尝试一个INNER JOIN,或者将WHERE子句放在原始查询上,而不是嵌套的SELECT。 – 2015-04-01 13:26:20

+2

您的WHERE sku_master.min_on_hand> 0在子查询中。它应该在主查询中吗? – LeeG 2015-04-01 13:26:31

正如其他人在评论中提到的,在子查询中过滤min_on_hand没有任何影响 - 您仍然会返回sku_master中的值,但它们不会包含来自x的任何数据。

如果将检查主查询,那么你将不会看到任何记录,其中min_on_hand = 0

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku 
WHERE 
    sku_master.min_on_hand > 0 

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku; 
    WHERE 
     sku_master.min_on_hand > 0 

移动WHERE固定问题的声明的结尾。

你有一个正确的答案,但为什么在派生表

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM [FCI].dbo.[sku_master] 
LEFT JOIN (SELECT sku, 
        sum(qty_on_hand) as total_qty_on_hand 
       FROM [FCI].[dbo].[location_inventory] 
       GROUP BY sku) x 
    ON sku_master.sku = x.sku 
WHERE sku_master.min_on_hand > 0 
+0

因为我是新的,这就是我的想法:) – eternityhq 2015-04-01 14:02:37

我用这个查询的加入。它返回库存摘要,对于库存量的最低需要超过所有记录0

`/ * LEFT JOIN sku_master */

SELECT  sku_master.sku, sku_master.description, sku_master.min_on_hand, 
        sku_master.max_on_hand, 
        location_inventory.qty_on_hand AS total_qty_on_hand 
    FROM   sku_master LEFT OUTER JOIN location_inventory 
        ON sku_master.sku = location_inventory.sku 
    GROUP BY sku_master.sku, sku_master.description, 
        sku_master.min_on_hand, sku_master.max_on_hand, 
        location_inventory.qty_on_hand 
    HAVING  (sku_master.min_on_hand > 0)`