我如何 select 来自一个 table 的所有行,根据另一个 table 计算字段值

How can I select all rows from one table, calculating a field value based on another table

我有一个 table merchandisesmerchandise_groups_merchandise。后面的table就是中间的table,用来存放在哪个商品组里面选择了哪些商品——多对多。从 merchandises.idmerchandise_groups_merchandise.merchandise_id 有关系。

我正在尝试组合一个查询以生成以下结果,列出 merchandises table 中的所有商品,其中 is_selected 是一个布尔值,由是否merchandise_id 在 merchandise_groups_merchandise table 中用于特定的 merchandise_group。并且,merchandise_groups_merchandise.group_id 由用户指定。

我试过在两个 table 之间进行 LEFT 连接,但是当然,只有 returns 组中间 table 中的实际商品。

我该怎么做?

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

一种方法是使用 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