2011-02-23 123 views
0

我從這個查詢得到以下錯誤:INNER JOIN問題

1054 - 未知列 'sheet_items.color_id' 在 '關於條款'

select sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color 
from sheet_items, materials 
inner join colors 
on colors.color_id=sheet_items.color_id 
where sheet_items.sheet_id=4 and sheet_items.material_id=materials.material_id 

任何想法?提前致謝!

+0

那麼,'sheet_items'是否有一個名爲'color_id'的列? – 2011-02-23 21:57:45

+0

你能粘貼這些表的模式嗎?該消息非常明確,表中沒有名爲** color_id **的列** sheet_items ** – Augusto 2011-02-23 21:57:50

+0

我確實有一個名爲color_id的列,這就是爲什麼它是一個奇怪的錯誤。 – 2011-02-23 22:00:10

回答

1

你現在構建的方式,你想內部連接材料顏色,因此,它不知道你在說什麼列..嘗試

select sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color 
from materials,sheet_items 
inner join colors 
on colors.color_id=sheet_items.color_id 
where sheet_items.sheet_id=4 and sheet_items.material_id=materials.material_id 
+0

CREATE TABLE IF NOT EXISTS'sheet_items'( 'sheet_item_id' INT(11)NOT NULL AUTO_INCREMENT, 'sheet_id' INT(11)NOT NULL, 'user_id' INT(11)NOT NULL, 'material_id' INT( 11)NOT NULL, 'color_id' INT(11)DEFAULT NULL, 'quantity' INT(11)NOT NULL, 'timestamp'時間戳NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY('sheet_item_id') ) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2; – 2011-02-23 22:01:25

1

看起來你的預混合&後ANSI92 SQL,嘗試要麼...

PRE ANSI92

select sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color 
from sheet_items, materials, colors 
where sheet_items.sheet_id=4 and sheet_items.material_id=materials.material_id AND 
colors.color_id=sheet_items.color_id 

POST ANSI92

select sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color 
from sheet_items 
inner join materials 
on sheet_items.material_id=materials.material_id 
inner join colors 
on colors.color_id=sheet_items.color_id 
where sheet_items.sheet_id=4 

無論哪種方式,恕我直言,第二格式更容易閱讀/理解&調試和將在所有SQL平臺

0

工作,你必須在你這裏一個隱含的內部聯接sheet_items和材料之間的條款。你應該說出來你的where子句中,並把它變成你的投影,所以它看起來是這樣的:

select sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color from materials 
inner join sheet_items on materials.material_id=sheet_items.material_id 
inner join colors on colors.color_id=sheet_items.color_id 
where sheet_items.sheet_id=4 
0

別把你加入的方式,它變得非常混亂。

SELECT sheet_items.sheet_id, sheet_items.quantity, materials.material, colors.color 
FROM 
sheet_items 
INNER JOIN materials ON materials.id=sheet_items.material_id 
INNER JOIN colors ON colors.color_id=sheet_items.color_id 
WHERE 
sheet_items.sheet_id=4