2012-10-24 74 views
1

我试图加入5个不同的表。他们每个人都有一个Mysql加入多个表

名称列,ID列和实验柱

除此之外,没有什么完全所有这些是一样的。

SELECT name FROM `weapons`,`arrows`,`trees`,`ores`,`bars` ORDER BY exp DESC 

是我能想出的,它说名称是不明确的。谢谢!

这就像我试图如果你有你需要的表名添加到列名称相同的列组合成一个大名单

+0

你确定你不想要一个联盟而不是JOIN? – jmoerdyk

+0

我不知道我需要什么。哈.... –

+0

@AlanBowen请张贴一些样本数据,然后期望的结果,然后你会得到一个答案,可以产生结果。 – Taryn

回答

0

您可能需要使用一个表前缀标识表从哪个,要检索name例如如下:

SELECT w.name FROM weapons w, arrows a, trees t, ores o, bars b ORDER BY exp DESC 

我想你也错过了加入条件。

您的查询应该是这样的:

SELECT w.name 
FROM weapons w JOIN arrows a 
    ON w.id = a.id 
    JOIN trees t 
    ON a.id = t.id 
    JOIN ores o 
    ON t.id = o.id 
    JOIN bars b 
    ON o.id = b.id 
ORDER BY exp DESC; 

或者,如果你想为union --> combine rows from all tables则:

SELECT name 
FROM weapons 
UNION ALL 
SELECT name 
FROM arrows 
UNION ALL 
SELECT name 
FROM trees 
UNION ALL 
SELECT name 
FROM ores 
UNION ALL 
SELECT name 
FROM bars; 
1

5个单独的用户表。您还可以为表使用别名,并缩短查询。

如果您想选择的weaponsarrows表的name列别

SELECT w.name, a.name 
FROM `weapons` as w, `arrows` as a,`trees` as t,`ores` ass o,`bars` as b 
ORDER BY exp DESC 
+0

没有一个表具有相同的名称。 –

+0

我会在列名上放置一个别名,这样你就知道它来自'weapon.name作为WeaponsName,arrows.name作为ArrowsName'的表是什么表。 – Taryn

+0

@AlanBowen:但是列具有相同的名称。你需要从哪个表中告诉数据库引擎你想要哪个'name'列。 –

0

如果你正在寻找一个大名单,你想联盟表格,而不是JOIN。

SELECT * FROM weapons 
UNION 
SELECT * FROM arrows 
UNION 
SELECT * FROM trees 
UNION 
SELECT * FROM ores 
UNION 
SELECT * FROM bars; 

如果你只是想的名字,SELECT name代替SELECT *

0

如果你想要一个大名单,你可以使用以下命令:

select name, id, exp, 'weapons' as TableFrom 
from weapons 
union all 
select name, id, exp, 'arrows' as TableFrom 
from arrows 
union all 
select name, id, exp, 'trees' as TableFrom 
from trees 
union all 
select name, id, exp, 'ores' as TableFrom 
from ores 
union all 
select name, id, exp, 'bars' as TableFrom 
from bars 
order by 3 

我加了最后一栏,以帮助确定数据来自哪个表。如果你不想要,那么你可以放弃它。