选择 UNION 除了一列

Ion*_*Ion 7 sql union sql-server-2008

我有个问题:

我想使用 UNION 将两个 SQL 查询连接到一个查询中以避免重复,但我需要知道数据是来自第一个选择查询还是来自第二个选择查询。

样本数据:

 A TABLE                                                B TABLE
-----------------------------------------------------------------------------
01 JOHN                                                01 JOHN
02 JUAN                                                02 PETER
03 MARTIN                                              03 MARTIN
Run Code Online (Sandbox Code Playgroud)

我有这样的事情:

Select A.code,A.name from A where some conditions
unión
Select B.code,B.name from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)

结果表


    01 JOHN                                                
    02 JUAN  
    02 PETER
    03 MARTIN
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在如果我想知道数据是来自第一个查询还是来自第二个查询,我认为是这样的:

Select A.code,A.name, 'A'   from A where some conditions
unión
Select B.code,B.name, 'B'   from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)

结果表


    01 JOHN  'A'                                              
    01 JOHN  'B'
    02 JUAN  'A'
    02 PETER 'B'
    03 MARTIN 'A'
    03 MARTIN 'B'
Run Code Online (Sandbox Code Playgroud)

但是不要避免“重复”,因为 'A' 与 'B' 不同,所以问题是,我可以做些什么让他们不将 'A' 与 'B' 进行比较吗?得到预期的结果?

编辑:

预期的结果


    01 JOHN  'A'                                              
    02 JUAN  'A'
    02 PETER 'B'
    03 MARTIN 'A'
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 5

这是另一种方法:

SELECT code, name, MIN(SourceTable) AS SourceTable
FROM (
  SELECT code, name, 'A' AS SourceTable         
  FROM A

  UNION 

  SELECT code, name, 'B' AS SourceTable         
  FROM B) t
GROUP BY code, name 
ORDER BY code
Run Code Online (Sandbox Code Playgroud)

演示在这里

也许:

SELECT code, name, SourceTable
FROM (
  SELECT code, name, SourceTable,
         ROW_NUMBER() OVER (PARTITION BY code, name 
                            ORDER BY SourceTable) AS rn
  FROM (
    SELECT code, name, 'A' AS SourceTable         
    FROM A

    UNION ALL

    SELECT code, name, 'B' AS SourceTable         
    FROM B) t) AS x
WHERE x.rn = 1  
Run Code Online (Sandbox Code Playgroud)

演示在这里