在mySQL中,是否可以从两个表中进行SELECT并合并列?

时间:2010-05-26 13:25:39

标签: database mysql sql

如果我在mysql中有两个具有相似列的表...

TABLEA
  id
  name
  somefield1

TABLEB 
  id
  name
  somefield1
  somefield2

如何构造SELECT语句,以便我可以同时从两个表中进行SELECT,并将结果集合并为相同的列?

所以,例如,我希望做类似......

的事情
SELECT name, somefield1 FROM TABLEA, TABLEB WHERE name="mooseburgers";

...并且具有名称,并且两个表中的somefield1列在结果集中合并在一起。

谢谢你的帮助!

附加样本输出,因为问题不清楚:

我希望table1中的行和table2中的行附加在resultset中。例如,如果表包含

TABLEA
id(1) name(zoot) somefield(suit)

TABLEB
id(1) name(zoot) somefield(flute)

The resultet would look like:

name     |     somefield1
zoot           suit
zoot           flute

4 个答案:

答案 0 :(得分:8)

您可以使用(id,name)作为加入条件,将两个表中的列组合为:

select
    a.id                               as id,
    a.name                             as name,
    a.somefield1 || ' ' || b.somefied1 as somefield1
from tablea a, tableb b
where a.id   = b.id
  and a.name = b.name
  and b.name = 'mooseburgers';

如果您只想加入(id)并将名称和somefield1列合并:

select
    a.id                               as id,
    a.name || ' ' || b.name            as name,
    a.somefield1 || ' ' || b.somefied1 as somefield1
from tablea a, tableb b
where a.id   = b.id
  and b.name = 'mooseburgers';

虽然我不得不承认这是一种相当不寻常的做事方式。我认为你有理由: - )

如果我误解了你的问题并且你只想要两个表的更传统的联合,请使用类似的东西:

select id, name, somefield1, '' as somefield2 from tablea where name = 'mooseburgers'
union all
select id, name, somefield1, somefield2 from tableb where name = 'mooseburgers'

这不会合并行,而只会附加两个查询中的行。如果要删除重复的行,请单独使用union,但如果您确定没有重复项,或者您不希望删除它们,则union all通常会更有效。


根据您的编辑,实际查询将是:

select name, somefield1 from tablea where name = 'zoot'
union all
select name, somefield1 from tableb where name = 'zoot'

(或union如果您不希望重复a.name==b.name=='zoot'a.somefield1==b.somefield1)。

答案 1 :(得分:2)

我不确定合并的含义,但您可以UNION结果:

SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers"
union all
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers"; 

答案 2 :(得分:1)

根据合并的含义,这是一个可能的解决方案。

Select id,name,somefield1 from TableA
WHERE Name ='mooseburgers'
UNION
Select id,name,somefield1 from TableB
WHERE Name ='mooseburgers'

允许您显示两个表的结果,并将结果合并到1个表中。

答案 3 :(得分:0)

你或许是指

SELECT tableA.id, tableA.name, tableA.somefield1
FROM tableA, tableB
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers"