如何从一个表中选择所有行,根据另一个表计算字段值

时间:2015-10-17 01:19:26

标签: sql ms-access ms-access-2013

我有一张表merchandisesmerchandise_groups_merchandise。后一个表是用于存储哪个商品被选择在哪个商品组中的中间表 - 多个到多个。有merchandises.idmerchandise_groups_merchandise.merchandise_id之间的关系。

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

我在两张桌子之间尝试过LEFT加入,当然,这只会返回组中间表中的实际商品。

我该怎么做?

-------------------------------
|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]));

1 个答案:

答案 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