2016-01-29 111 views
-2

的MS Access这个LEFT JOIN/SELECT有什么问题? (在SELECT单独的作品,和LEFT JOIN wthout SELECT也可以)

表:

prodcuts: 
+----+---------+ 
| id | p_name | 
+----+---------+ 
warehouses: 
+----+--------+ 
| id | w_name | 
+----+--------+ 
how_many_should_be: 
+--------------+------------+----------+ 
| warehouse_id | product_id | how_many | 
+--------------+------------+----------+ 
intake 
+--------------+------------+---------------+ 
| warehouse_id | product_id | intake_amount | 
+--------------+------------+---------------+ 

想要的查询结果:

+--------+--------+--------------------+------------+ 
| w_name | p_name | how_many_should_be | intake_sum | 
+--------+--------+--------------------+------------+ 

这是查询: 它工作正常,如果我忽略了“LEFT JOIN”,并且LEFT JOIN中的SLELET工作正常,如果放入查询本身。我知道什么是错的。

SELECT 
warehouses.w_name AS [w_name], 
products.p_name AS [p_name], 
how_many_should_be.how_many AS [how_many_should_be] 



FROM (((how_many_should_be INNER JOIN warehouses ON how_many_should_be.warehouse_id = warehouses.id) 

INNER JOIN products ON how_many_should_be.product_id = products.id) 

LEFT JOIN 
    (SELECT intake.warehouse_id, intake.product_id, Sum(intake.units_amout) AS [intake_sum] 
    FROM intake 
    GROUP BY intake.warehouse_id, intake.product_id) 
ON how_many_should_be.warehouse_id = intake.warehouse_id) 

ORDER BY warehouses.w_name, products.p_name 

错误:“语法错误的JOIN操作”

+1

我认为你需要在subqueris别名。 –

+0

@Gordon Linoff OK。现在与别名它显示所有记录上的所有INTAKE_SUM –

+0

更新:我添加了“how_many_should_be.product_id = intake.product_id”,它确实工作!谢谢! –

回答

0

作为海报前面所提到的,你需要正确别名子查询,并确保更新任何JOIN和SELECT语句。下面是它会是什么样子(我重写了内连我自己而言,随时保持你的是,它不应该影响最终结果):

SELECT 
warehouses.w_name AS [w_name], 
products.p_name AS [p_name], 
how_many_should_be.how_many AS [how_many_should_be], 
Agg_Intake.[intake_sum] -- pull in the SUM from the sub query 
FROM warehouses 
INNER JOIN how_many_should_be 
    ON how_many_should_be.warehouse_id = warehouses.id 
INNER JOIN products 
    ON how_many_should_be.product_id = products.id 
LEFT JOIN (
    SELECT intake.warehouse_id, intake.product_id, Sum(intake.units_amout) AS [intake_sum] 
    FROM intake 
    GROUP BY intake.warehouse_id, intake.product_id 
    ) Agg_Intake -- the needed alias for the subquery 
    ON how_many_should_be.warehouse_id = Agg_Intake.warehouse_id -- join ON the aliased subquery.column name 
ORDER BY warehouses.w_name, products.p_name