2015-05-05 3 views
1

У меня есть три таблицы item, store и stock_movement. Движение запаса имеет поля id, item_id, store_id и quantity. Я хотел бы создать представление, показывающее сумму количеств каждого элемента в каждом магазине. Если в магазине нет записи stock_movement, количество должно быть равно нулю.Код ошибки 1054 неизвестная колонка на перекрестном соединении

я придумал следующий запрос:

SELECT item.*, store.id, SUM(s.quantity) AS quantity 
FROM item, store 
LEFT JOIN stock_movement s ON s.item_id = item.id AND store.id = s.store_id 
GROUP BY store.id, item.id; 

Я получаю следующее сообщение об ошибке:

Error Code: 1054 Unknown column 'item.id' in 'on clause'

Если переключить запрос использовать FROM store, item неизвестные изменения столбцов:

Error Code: 1054 Unknown column 'store.id' in 'on clause'

This answer to use INNER JOIN не будет работать для меня, так как есть некоторые предметы и сто res без соответствующих stock_movement записей, в результате чего отсутствует несколько строк.

Итак, есть ли способ сделать это кросс-соединение?

+0

Вы уже смешиваете неявные внутренние соединения и явное левое соединение, используя список таблиц, разделенных запятыми, в предложении 'FROM'. Вероятно, все, что вам нужно, это «LEFT JOIN» между 'stock_movement' и' store', но можете ли вы разместить небольшой образец строк из каждой таблицы вместе с образцом того, что вы ожидаете от вывода запроса? –

+0

Вы пробовали накладывать элементы и хранить таблицы? – Zoldren

+0

@ Zoldren да. Такая же ошибка. – topher

ответ

2

Вам необходимо явно определить свой cross join:

select i.id, s.id, coalesce(sum(si.quantity),0) quantity 
from store s 
    cross join item i 
    left join storeitem si on s.id = si.storeid and i.id = si.itemid 
group by i.id, s.id 

BTW - делая это таким образом, вы создаете декартово произведение - все магазины имеют все элементы ,

+0

Отлично. Не знаю, почему неявный не работает. – topher

Смежные вопросы