我如何 select 来自一个 table 的所有行,根据另一个 table 计算字段值
How can I select all rows from one table, calculating a field value based on another table
我有一个 table merchandises
和 merchandise_groups_merchandise
。后面的table就是中间的table,用来存放在哪个商品组里面选择了哪些商品——多对多。从 merchandises.id
到 merchandise_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
我有一个 table merchandises
和 merchandise_groups_merchandise
。后面的table就是中间的table,用来存放在哪个商品组里面选择了哪些商品——多对多。从 merchandises.id
到 merchandise_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