繁体   English   中英

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

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

我有一张桌子上的merchandisesmerchandise_groups_merchandise 后一个表是中间表,用于存储在多个商品组中选择的商品(多对多)。 merchandises.idmerchandise_groups_merchandise.merchandise_id有一个关系。

我正在尝试汇总一个查询,以产生以下结果,列出merchandises表中的所有商品,并且is_selected是布尔值的布尔值,该布尔值由merchandise_id是否在特定merchandise_group的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]));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM