2015-10-17 3 views
0

У меня есть таблица merchandises и merchandise_groups_merchandise. Последняя таблица представляет собой среднюю таблицу для хранения того, какой товар выбран внутри групп товаров - от многих до многих. Существует отношение от merchandises.id до merchandise_groups_merchandise.merchandise_id.Как выбрать все строки из одной таблицы, вычисляя значение поля на основе другой таблицы

Я пытаюсь собрать запрос для получения следующих результатов, в котором перечислены все товары из merchandises таблицы и где is_selected является булевой решает, является ли merchandise_id в merchandise_groups_merchandise таблице для конкретного merchandise_group. И, 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])); 
+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