2016-01-11 2 views
1

У меня трудные времена с объединениями в MySQL. У меня 4 таблицы, все связаны друг с другом.Несколько таблиц соединяются с несколькими внешними ключами MySQL

**Order**: order_id, shop_id(fk), date, day, order_price, PK_order 
**Scan** : scan_id(PK), item_id, order_id(FK), stack, stack_price, price, note 
**Item** : item_id(PK), item_name 
**Shop** : shop_id(PK), shop_name 

Я хочу построить запрос, который выводит что-то вроде этого:

date|day|shop_name|item_name|stack|stack_price|price|note 

Мой запрос выглядит следующим образом:

Select 
     order.date, order.day, shop.shop_name, item.item_name, scan.stack, scan.stack_price, 
     scan.price, scan.note 
From 
     order, scan, shop, item 
Join 
     shop on order.shop_id = shop.shop_id 
Join 
     item on scan.item_id = item.item_id 

Я получаю ошибку 1054: Неизвестный столбец ... в 'on clause' или другая ошибка псевдонима.

Однако, когда я выбираю только один столбец из одной таблицы, я заставляю его работать. Этот запрос работает:

select item.item_name from scan inner join item on scan.item_id = item.item_id 

Я думаю, что есть какая-то проблема с выбором из нескольких таблиц ... Любой человек может мне помочь? Каждый ответ приветствуется. Благодаря

+1

Слово 'order' особенного в MySQL, так что это хорошая идея поставить галочки вокруг него, если вы не делаете в' ORDER BY '. – wogsland

+0

, несмотря на то, что ответ Vr46 верен - я думаю - переосмыслите имя «заказ» как имя таблицы, как упомянуто wogsland - «порядок» вызовет проблемы в любом sql, вы не будете называть таблицу «где» или «выбирать», ? – halfbit

+0

На самом деле я не использую это слово в своем проекте, я просто перевел его на английский с моего родного языка, чтобы вы могли понять :-) – JosefPP

ответ

1

Вы совместили разделенные запятой присоединиться и Inner присоединиться где вы использовали одну таблицу более одного раза, не требуется.

Если не ошибаюсь, это то, что вы ищете

SELECT `order`.`DATE`, 
     `order`.`day`, 
     shop.shop_name, 
     item.item_name, 
     scan.stack, 
     scan.stack_price, 
     scan.price, 
     scan.note 
FROM `order` 
     join scan 
     ON `order`.order_id = scan.order_id 
     join shop 
     ON `order`.shop_id = shop.shop_id 
     join item 
     ON scan.item_id = item.item_id 
+0

спасибо, он работает, но я получаю пустой набор: D Я должен переосмыслить свою логику – JosefPP

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