来自同一个表的多个 INNER JOIN
Posted
技术标签:
【中文标题】来自同一个表的多个 INNER JOIN【英文标题】:Multiple INNER JOIN from the same table 【发布时间】:2012-03-11 08:13:57 【问题描述】:我有一张金属表
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
我正在尝试选择三个 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=?
看来我做错了。请帮忙。
【问题讨论】:
你不能有多个同名的别名。 你想达到什么目的? 【参考方案1】:您应该为您的表格指定不同的别名。你都叫他们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=?
【讨论】:
很好,我们在完全相同的时间编写了完全相同的示例代码。应该是双胞胎。 +1,事实上:) 还是有问题。我得到结果 -> Zn,Zn,Zn 虽然有不同的金属 @Nathan 考虑到我们在没有测试的情况下在几秒钟内写下了这些答案,这是极有可能的。不过,这些示例应该能让您朝着正确的方向前进。 您的数据可能有问题,请检查 k.metail1,k.metal2,k.metal3 是否具有相同的值? 是的,那是真正的答案。几秒钟内有 7 个答案。【参考方案2】:嗯,没有完全错。 ;)
无论您在哪里使用“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=?
【讨论】:
【参考方案3】:试试这个:
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=?
【讨论】:
【参考方案4】: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
【讨论】:
以上是关于来自同一个表的多个 INNER JOIN的主要内容,如果未能解决你的问题,请参考以下文章
来自第二个表的 MySQL INNER JOIN (TOP10)
C# SqlDataAdapter 与来自多个数据库的表的 JOIN
C# SqlDataAdapter 与来自多个数据库的表的 JOIN
SQL_连接(Join),内部连接(INNER JOIN),左连接(LEFT JOIN ),右连接(RIGHT JOIN)完整外部连接(FULL OUTER JOIN),自连接(Self JOIN)(