【问题标题】:TSQL JOIN two tables in one big tableTSQL JOIN 一张大表中的两张表
【发布时间】:2017-02-07 20:12:58
【问题描述】:

我需要在一张大表中加入表 A 和表 B。在每个表中我都有(id、brand、power)。

表 A

id | brand | power
-------------------  
 1 |   BMW |   500 
 2 | SKODA |   220
 3 |PORSCHE|   450

表 B

id | brand | power
-------------------  
 1 |    BMW|   500 
 2 |  SKODA|   220
 4 |FERRARI|   600
 5 | HUMMER|   350

结果应该是:

  | A.brand | A.power | B.brand | B.power
------------------------------------------
1 | BMW     |     500 | BMW     |     500 
2 | SKODA   |     220 | SKODA   |     220
3 | PORSCHE |     450 | null    |    null
4 | null    |    null | FERRARI |     600
5 | null    |    null | HUMMER  |     350

这是我尝试过的方法,但似乎不起作用。

SELECT
A.id,A.brand,A.[power],B.brand,B.[power]
FROM A
FULL JOIN B on A.id = B.id

有什么帮助吗?

【问题讨论】:

  • 如果你能更好地描述问题而不是“它似乎不起作用”会有所帮助。
  • 这不能是 oracle AND mysql AND sql-server。您使用的是哪个 dbms 供应商/产品?
  • 我使用的是 sqlserver 2014
  • 为什么在全外连接中power变成-450?
  • 我在编辑时错过了 :)

标签: sql-server database tsql join


【解决方案1】:

我知道这是一种蛮力,但它暂时有效:

SELECT a.id, 
       a.brand, 
       a.[power], 
       b.brand, 
       b.[power] 
FROM   a 
       LEFT OUTER JOIN b 
                    ON a.id = b.id 
UNION 
SELECT id, 
       NULL AS brand, 
       NULL AS power, 
       brand, 
       power 
FROM   b 
WHERE  id NOT IN (SELECT id 
                  FROM   a)

【讨论】:

  • 它的工作!
【解决方案2】:

你应该使用完整的句子:

SELECT
A.id,A.brand,A.power,B.brand,B.power
FROM tableA A
FULL OUTER JOIN tableB B on A.id = B.id

【讨论】:

  • @zineddinereda 有什么问题?你是怎么命名这两个表的?
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多