Sql 来自同一个表的多个内部联接

Sql 来自同一个表的多个内部联接,sql,sqlite,join,inner-join,Sql,Sqlite,Join,Inner Join,我有一张金属表 MetalID integer MetalName text MetalCode text 项目表 ItemID integer ItemName text ... Metal1 int Ref.-> metals.metalID Metal2 int Ref.-> metals.metalID Metal3 int Ref.-> metals.metalID 我正在尝试选择三个金属代码 SELECT m.Met

我有一张金属表

MetalID    integer
MetalName  text
MetalCode  text
项目表

ItemID     integer
ItemName   text
...
Metal1     int Ref.-> metals.metalID
Metal2     int Ref.-> metals.metalID
Metal3     int Ref.-> metals.metalID
我正在尝试选择三个金属代码

SELECT m.MetalCode as 'Metal1', m.MetalCode as 'Metal2',m.MetalCode as 'Metal3'
FROM Item as k
INNER JOIN Metals AS m ON m.metalID=k.metal1 
INNER JOIN Metals AS m ON m.metalID=k.metal2
INNER JOIN Metals AS m ON m.metalID=k.metal3
WHERE k.ItemID=?

看来我做得完全不对。请提供帮助。

您应该为表指定不同的别名。你把他们都叫做m

SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3'
FROM Item as k
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3
WHERE k.ItemID=?
试试这个:

SELECT m.MetalCode as 'Metal1', n.MetalCode as 'Metal2'o.MetalCode as 'Metal3'
FROM Item as k INNER JOIN Metals AS m ON m.metalID=k.metal1 
        INNER JOIN Metals AS n ON n.metalID=k.metal2
        INNER JOIN Metals AS o ON o.metalID=k.metal3
WHERE k.ItemID=?
嗯,不是完全错

无论什么地方有“内部连接金属如m”,
m
都必须是独一无二的(而不是每次都是
m

尝试以下方法(未经测试):

或者更简单,但每行获得一个metalcode

SELECT MetalCode
FROM Item
WHERE metalID = metal1 OR metalID = metal2 OR metalID = metal3

您不能有多个同名别名。您想实现什么?很好,我们在同一时间编写了完全相同的示例代码。一定是双胞胎+事实上:)还是有点不对劲。我得到的结果->锌,锌,锌,而有不同的metals@Nathan考虑到我们没有经过测试就在几秒钟内写出了这些答案,这是极有可能的。这些例子应该会让你朝着正确的方向前进。也许你的数据有问题,请检查k.metail1,k.metal2,k.metal3是否具有相同的值?是的,这才是真正的答案。几秒钟内有7个答案。
SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3'
FROM Item as k
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3
WHERE k.ItemID=?
SELECT MetalCode
FROM Item
WHERE metalID = metal1 OR metalID = metal2 OR metalID = metal3