来自同一个表的多个INNER JOIN

NCF*_*USN 19 sql sqlite join inner-join

我有一张金属表

MetalID    integer
MetalName  text
MetalCode  text
Run Code Online (Sandbox Code Playgroud)

物品表

ItemID     integer
ItemName   text
...
Metal1     int Ref.-> metals.metalID
Metal2     int Ref.-> metals.metalID
Metal3     int Ref.-> metals.metalID
Run Code Online (Sandbox Code Playgroud)

我正在尝试选择三个MetalCodes

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=?
Run Code Online (Sandbox Code Playgroud)

看起来我完全错了.请帮忙.

Bea*_*692 29

您应该为表指定多个别名.你打电话给他们所有人.

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=?
Run Code Online (Sandbox Code Playgroud)

  • 很好,我们在完全相同的时间写了完全相同的示例代码.必须是双胞胎.+1,实际上:) (2认同)
  • 也许您的数据有问题,请检查 k.metail1,k.metal2,k.metal3 是否具有相同的值? (2认同)

Dag*_*bit 9

好吧,并非完全错误.;)

无论你有什么"INNER JOIN Metals AS m ",都m需要有独特的东西(不是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=?
Run Code Online (Sandbox Code Playgroud)