【问题标题】:What kind of SQL join is this?这是什么类型的 SQL 连接?
【发布时间】:2009-10-05 14:56:15
【问题描述】:

假设出于某种原因,我在两个单独的表中分别有员工,员工 1 和员工 2

我只想把它们加在一起,就好像它们叠在一起一样。

类似:

select all from employee1 and employee2 where name = bubba

我知道我在概括,这最终将在 postgres 中,所以如果有任何细节我应该注意谢谢

【问题讨论】:

  • 西部最快的枪 - 观察。

标签: sql join union


【解决方案1】:
SELECT field1, field2, field2 FROM tableA WHERE field1='x'
UNION
SELECT field1, field2, field2 FROM tableB WHERE field1='x'

如果您想要每条记录,甚至重复,请使用UNION ALL

【讨论】:

  • +1 用于写出列名,这很重要,因为每个表中的列可能不以相同的顺序存在,并且可以解释 UNION ALL 的使用。
  • +1 关于列名。如果只是表格中的“*”,它是通用的并且可以失败。特别是如果不同的列名、大小、序列等会导致 UNION 崩溃。明确说明想要的东西比通用和失败更好
【解决方案2】:

你只想做一个联合

select * from Employee1 where name = 'bubba'
union
select * from Employee2 where name = 'bubba'

【讨论】:

【解决方案3】:

您将需要使用 UNION 关键字

select * from employee1 where name = 'bubba'
union
select * from employee2 where name = 'bubba'

【讨论】:

  • 为什么这被否决了?被编辑了吗?事实上,它是正确的。
  • 没有编辑,我猜有答案的人会否决其他答案,所以他们的答案出现在顶部。
  • 我会支持你,因为我讨厌人们反对正确答案
  • 你不应该在联合语句中使用 select *。始终明确说明列名。如果一个表被改变而另一个没有被改变,或者如果某个白痴决定重新排列表上的列顺序,则其他明智的事情将会中断。
  • UNION ALL 应该被用作想要欺骗的对象
【解决方案4】:

在大多数数据库中,您所请求的内容称为UNION,并如下所示:

select all from employee1 where name = bubba

UNION

select all from employee2 where name = bubba

这来自Relational Algebra's "union" operator,它的原语之一。

请注意,UNION 遵循集合并集,即对于 E1 和 E2 表之间重复的任何行,它只会选择该行的 ONE 副本。如果要选择所有副本,请使用“UNION ALL”运算符。

【讨论】:

    【解决方案5】:

    我想你指的是UNION 操作。

    【讨论】:

      【解决方案6】:

      如果表具有相同的架构则

      SELECT * FROM employee1 UNION SELECT * FROM employee2
      

      两个表的列数必须相同,并且列的类型必须相似。

      【讨论】:

        【解决方案7】:

        我猜是工会

        从员工 1 中选择 *,其中 name = 'bubba'

        联合

        select * from employee2 where name = 'bubba'

        如果您还想要重复,请使用 union all。

        【讨论】:

          【解决方案8】:

          你想要的是一个“联合所有”:

          select * from employee1
          union all
          select * from employee2;
          

          列类型和顺序必须匹配,否则您需要在选择列表中提供列列表而不是“*”。可以将“where”子句添加到任一“select”语句或两个“select”语句中。

          没有“all”,两个查询之间的任何重复行都将折叠成一行。如果这是您想要的,只需删除“全部”即可。

          【讨论】:

            【解决方案9】:

            正如其他人提到的,你想要UNION。但是,如果您真的想要堆叠的结果,您应该使用UNION ALLUNION 将删除欺骗,UNION ALL 并包含它们。见http://www.postgresql.org/docs/8.2/interactive/queries-union.html

            【讨论】:

              【解决方案10】:

              不管怎样,union all 执行起来更快,因为它不需要排序来消除两组中的重复项。

              【讨论】:

                猜你喜欢
                • 2022-07-22
                • 1970-01-01
                • 2019-06-15
                • 1970-01-01
                • 1970-01-01
                • 2012-01-09
                • 2019-12-23
                • 1970-01-01
                相关资源
                最近更新 更多