在 mySQL 中,是不是可以从两个表中选择并合并列?

Posted

技术标签:

【中文标题】在 mySQL 中,是不是可以从两个表中选择并合并列?【英文标题】:In mySQL, Is it possible to SELECT from two tables and merge the columns?在 mySQL 中,是否可以从两个表中选择并合并列? 【发布时间】:2010-05-26 13:25:38 【问题描述】:

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

TABLEA
  id
  name
  somefield1

TABLEB 
  id
  name
  somefield1
  somefield2

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

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

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

...并在结果集中将两个表中的名称和 somefield1 列合并在一起。

感谢您的帮助!

由于问题不清楚而附加了示例输出:

我希望将 table1 中的行和 table2 中的行附加到结果集中。例如,如果表包含

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

【问题讨论】:

“合并”是什么意思?请提供示例输出。 【参考方案1】:

您可以使用 (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) 并结合 name 和 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 的位置重复)。

【讨论】:

谢谢。抱歉,如果我的问题不清楚。是的,我只想附加两个表中的行。并确保 Table1 中的 somefield1 列和 Table2 中的 somefield1 都出现在结果集中的单列 somefield 1 下。【参考方案2】:

我不确定你所说的合并是什么意思,但你可以UNION结果:

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

【讨论】:

【参考方案3】:

根据您所说的合并,这里有一个可能的解决方案。

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

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

【讨论】:

【参考方案4】:

你也许是说

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

【讨论】:

以上是关于在 mySQL 中,是不是可以从两个表中选择并合并列?的主要内容,如果未能解决你的问题,请参考以下文章

即使不是一个表中的所有行在另一个表中都有核心响应者,如何从 MySQL 中的两个表中进行选择?

使用 Linq 合并两个列表,并根据需要从不同的表中添加数据

MYSQL从两个表中选择匹配值[关闭]

从 mySQL 表中选择一列并检查验证

使用 PostgreSQL 从许多表中选择并合并相同的属性

从一个表中选择所有元素,并检查它们是不是与另一个表匹配