【问题标题】:SQL Query needed for fetch value from Two identical table but not fully identical table从两个相同但不完全相同的表中获取值所需的 SQL 查询
【发布时间】:2016-03-16 01:58:26
【问题描述】:

假设我们有两个表 A 和 B。

A 有 4 行,B 有 3 行。 在表 A 和 B 中,一些列值是相同的,因此有助于映射。

我想构建一个查询,它将获取表 B 下的所有详细信息,并从表 A 中获取不在表 A 中的记录。

Table A                
001 ABC Tango          
002 XYZ Alpha          
003 PQR Beta           
004 DEF Gamma

Table B
001 ABC Tango Delhi
002 XYZ Alpha Mumbai
003 PQR Beta Pune

所以我需要一个查询,它会给出这样的结果

001 ABC Tango Delhi
002 XYZ Alpha Mumbai
003 PQR Beta Pune
004 DEF Gamma

前三行来自表 B,最后 4 行来自表 A,因为特定数据不在表 B 中。

如果有人可以对此进行查询,请告诉我。

【问题讨论】:

  • Mysql 还是 ms sql?这是两种不同的产品。到目前为止你做了什么?
  • 先自己试试吧..只是提示您需要搜索连接类型。technet.microsoft.com/en-us/library/bb264565(v=sql.90).aspx
  • 请写出至少三种不同方式无法解释的英文。
  • 你试过简单的LEFT OUTER JOIN 吗?

标签: mysql sql sql-server


【解决方案1】:

做一个FULL OUTER JOIN:

select b.col1, b.col2, b.col3, a.col3
from b
  FULL OUTER JOIN a on a.col1 = b.col1 and a.col2 = b.col2

【讨论】:

  • 这不会在输出中显示记录 004 DEF Gamma。
【解决方案2】:

只是为了好玩,如果你想使用连接的解决方案:

SELECT CASE WHEN TableB.Field1 IS NULL THEN TableA.Field1 ELSE TableB.Field1 END AS Field1
, CASE WHEN TableB.Field1 IS NULL THEN TableA.Field2 ELSE TableB.Field2 END AS Field2
, CASE WHEN TableB.Field1 IS NULL THEN TableA.Field3 ELSE TableB.Field3 END AS Field3
, TableB.Field4
FROM TableB
FULL JOIN TableA ON TableA.Field1 = TableB.Field1

【讨论】:

  • 增加了TableB的第4列
【解决方案3】:
SELECT *, NULL AS Field4
FROM TableA
WHERE Field1 NOT IN (SELECT Field1 FROM TableB)
UNION ALL
SELECT *
FROM TableB

【讨论】:

  • 注意我使用了 UNION I/o LEFT 或 RIGHT JOIN 因为你需要使用例如ISNULL 来确定从哪个表中获取输出字段。
  • 这将返回 3 列,OP 需要 4 列。
  • 我猜你是对的,我将“德里”误读为“探戈”专栏的一部分。将编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 2020-12-06
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多