2015-10-17 146 views
0

我有一个表merchandisesmerchandise_groups_merchandise字段值。后面的表格是用于存储哪些商品被选择在哪个商品组中的中间表 - 多对多。从merchandises.idmerchandise_groups_merchandise.merchandise_id有关系。如何从一个表中选择所有行,计算基于另一个表

我试图把一个查询产生以下结果,从merchandises表中列出的所有商品和其中is_selected是由merchandise_id是否在merchandise_groups_merchandise表特定merchandise_group决定一个布尔值。并且,merchandise_groups_merchandise.group_id由用户指定。

我已经尝试了LEFT JOIN,两个表之间,当然,只有返回实际的商品那是在小组中间表。

我该怎么做?

------------------------------- 
|id |title |is_selected 
--------------------------- 
|1 |Tree |1 
|2 |Log |0 
|3 |Toy |1 

这是查询的SQL,我试过:

PARAMETERS group_id Short; 
SELECT IIf(IsNull([merchandise_groups_merchandise].[merchandise_id]),False,True) AS selected, merchandises.id, merchandises.title 
FROM merchandises LEFT JOIN merchandise_groups_merchandise ON merchandises.id = merchandise_groups_merchandise.merchandise_id 
WHERE (((merchandise_groups_merchandise.merchandise_group_id)=[group_id])); 
+0

你能提供的样本数据和期望结果如何?你的解释有点难以遵循。 –

回答

0

一种方法是用iif()exists子查询:

select m.*, 
     iif(exists (select 1 
        from merchandise_groups_merchandise as mgm 
        where m.id = mgm.merchandise_id and 
         mgm.merchandise_group_id = [group_id] 
       )), 1, 0) as IsInGroupFlag 
from merchandizes as m 
+0

我以前的子查询尝试失败,所以我认为Access无法处理它们。谢天谢地,它可以!而不必要的加入也让我失望。 – user3791372

相关问题