如何选择具有优先级第一个表的不同 UNION

Posted

技术标签:

【中文标题】如何选择具有优先级第一个表的不同 UNION【英文标题】:How to select Distinct UNION with priority 1st table 【发布时间】:2018-10-18 13:21:28 【问题描述】:

如何编写独特的联合查询,忽略所有表中的一列。

我想从两个具有相同字段名称的表中选择数据并插入到第三个表中,但数据应该是唯一的,除了一个字段(应该考虑第一个表行号)

CREATE TABLE table_a
(
    id INTEGER ,
    name TEXT,
    rownumber TEXT
) ;
CREATE TABLE table_b
(
    id INTEGER ,
    name TEXT,
    rownumber TEXT
) ;

CREATE TABLE table_c
(
    id INTEGER,
    name TEXT,
    rownumber TEXT
) ;

INSERT INTO 
   table_a
   (id, name, rownumber)
VALUES
   (1001, 'Alex' , '111'),
   (1002, 'John' , '112'),
   (1003, 'Max'  , '113'),
   (1004, 'Joly'  , '114'), 

INSERT INTO 
   table_b
   (id, name, rownumber)
VALUES
   (1005, 'Angila', '211'),
   (1002, 'John'  , '212'),
   (1006, 'Tim'   , '213'), 

预期的 Table_c 应该是唯一的 idname 从 "table_a" + "table_b" 和 "rowversion" 应该从 table_a 考虑

结果为:-

   (1001, 'Alex' , '111'),
   (1002, 'John' , '112'),  // From 1st table
   (1003, 'Max'  , '113'),
   (1004, 'Joly'  , '114'),

   (1005, 'Angila', '211'),
   (1006, 'Tim'   , '213'), 

【问题讨论】:

【参考方案1】:

not exists怎么样?

select a.*
from table_a a
union all
select b.*
from table_b b
where not exists (select 1 from table_a a where a.id = b.id and a.name = b.name);

【讨论】:

非常感谢您的快速回复 @skt 接受响应作​​为答案怎么样,以便将来遇到类似问题的任何人都可以找到“答案”。这就是 SO 的工作原理。

以上是关于如何选择具有优先级第一个表的不同 UNION的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 中对表的所有列进行 UNION ALL

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

选择具有行跨度的表的第一列

如何使用未绑定到具有实体框架代码优先的特定表的序列?

与 UNION 一起使用时,对每个 SQL Server 查询都不起作用的排序

选中时,UITabBar 项目具有不同的颜色