INNER JOIN问题

时间:2011-02-23 21:55:51

标签: mysql mysql-error-1054

我从此查询中收到以下错误:

1054 - 'on clause'

中的未知列'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

有什么想法吗?提前谢谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

无论哪种方式恕我直言,第二种格式更容易阅读/理解& debug并将在所有SQL平台上运行

答案 2 :(得分:0)

在sheet_items和材质之间的where子句中有一个隐式内连接。你应该从你的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

答案 3 :(得分:0)

不要混淆你做JOIN的方式,它会变得非常混乱。

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