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;
答
正如其他人在评论中提到的,在子查询中过滤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)`
你的意思是你不希望显示与min_on_hand =记录0? – RezaRahmati 2015-04-01 13:23:39
它看起来像你的唯一的左连接,如果他们是> 0,而不是过滤最终结果。您可以尝试一个INNER JOIN,或者将WHERE子句放在原始查询上,而不是嵌套的SELECT。 – 2015-04-01 13:26:20
您的WHERE sku_master.min_on_hand> 0在子查询中。它应该在主查询中吗? – LeeG 2015-04-01 13:26:31