【问题标题】:SQL Combining two tables with one same column without losing values of a different oneSQL将两个表与一个相同的列组合在一起而不会丢失不同的值
【发布时间】:2012-08-05 23:29:55
【问题描述】:

我已经为此苦苦挣扎了一段时间,我有两个不同的表共享一列,但都有不同的行数。 一张表用于资金请求(表1),另一张用于证明费用(表2)

表 1

+-----------+-----------+
|expenseid  | requestid |
+-----------+-----------+
| 16333     | 7454      |
| NULL      | 7455      |
| 16336     | 7456      |
| 16338     | 7457      |
| NULL      | 7458      |
| 16341     | 7459      |
| 16345     | 7460      |
| NULL      | 7461      |
| NULL      | 7462      |
+-----------+-----------+

表 2

+-----------+-----------+
|expenseid  | amount    |
+-----------+-----------+
| 16333     | 200       |
| 16334     | 150       |
| 16335     | 300       |
| 16336     | 900       |
| 16337     | 100       |
| 16338     | 120       |
| 16339     | 700       |
| 16340     | 431       |
| 16341     | 420       |
| 16342     | 150       |
| 16343     | 240       |
| 16344     | 465       |
| 16345     | 200       |
| 16346     | 120       |
| 16347     | 90        |
| 16348     | 50        |
| 16349     | 245       |
+-----------+-----------+

如您所见,这些表共享同一列“expenseid”,但行数不同,并且有两个不同的列彼此不对应,我希望有一个如下表

组合表

+-----------+-----------+-----------+
|expenseid  | amount    | requestid | 
+-----------+-----------+-----------+
| 16333     | 200       | 7454      |
| NULL      | NULL      | 7455      |
| 16334     | 150       | NULL      |
| 16335     | 300       | NULL      |
| 16336     | 900       | 7456      |
| 16337     | 100       | NULL      |
| 16338     | 120       | 7457      |
| NULL      | NULL      | 7458      |
| 16339     | 700       | NULL      |
| 16340     | 431       | NULL      |
| 16341     | 420       | 7459      |
| 16342     | 150       | NULL      |
| 16343     | 240       | NULL      |
| 16344     | 465       | NULL      |
| 16345     | 200       | 7460      |
| NULL      | NULL      | 7461      |
| NULL      | NULL      | 7462      |
| 16346     | 120       | NULL      |
| 16347     | 90        | NULL      |
| 16348     | 50        | NULL      |
| 16349     | 245       | NULL      |
+-----------+-----------+-----------+

我已经设法合并两个表,它显示与表 1 相关的费用 ID 的空值与左外连接,但它不显示列 requestid 的空值,任何关于如何的想法这样做?

【问题讨论】:

  • 从表 1、表 2 中选择 *?

标签: sql


【解决方案1】:

您需要FULL OUTER JOIN 而不是LEFT OUTER JOIN

SELECT
    COALESCE(Table1.expenseid, Table2.expenseid) AS expenseid,
    amount,
    requestid
FROM Table1
FULL OUTER JOIN Table2
ON Table1.expenseid = Table2.expenseid

结果:

EXPENSEID   AMOUNT  REQUESTID
16333       200     7454
(null)      (null)  7455
16336       900     7456
16338       120     7457
...etc...

在线查看:sqlfiddle

【讨论】:

  • 我试过做一个 FULL OUTER JOIN 但它和 LEFT OUTER JOIN 做的一样,我使用 SQL Server 来做这个
  • @EdnaRamirez:您可以发布您尝试过的查询吗?听起来你做错了什么。
  • SELECT r.requestid 作为requestid,e.expenseid 作为expenseid,e.amount 作为来自费用的金额e FULL OUTER JOIN requests r ON e.expenseid=r.expenseid
  • @EdnaRamirez:我可以看到与我的查询的唯一区别是您没有使用 COALESCE。
  • 非常感谢!像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多