如果我在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
答案 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"