mysql - 创建 View 连接两个具有相同列且没有重复的表

标签 mysql sql join view union

任何人都可以帮助我如何创建连接两个具有相同列且没有重复的表的 View 吗?

例子:

我有两个表 T1 和 T2

T1

Id    Name    Date
-----------------------
1     AAA     2019-04-05
2     BBB     2019-04-06
3     CCC     2019-04-07

T2

Id    Name    Date
----------------------
4     DDD     2019-04-01
1     ABC     2019-03-01
2     DEF     2019-03-02

我的输出 View 应该是这样的

Id    Name     Date
------------------------
1     AAA     2019-04-05  (From T1)
2     BBB     2019-04-06  (From T1)
3     CCC     2019-04-07  (From T1)
4     DDD     2019-04-01  (From T2)

下面是我正在尝试的查询

CREATE VIEW view AS (
  (
    SELECT
      t1.id,
      t1.name,
      t1.date,
    FROM
      T1 as t1
    UNION 
    SELECT
      t2.id,
      t2.name,
      t2.date,
    FROM
      T2 as t2
  )

但是我得到了重复的记录。

最佳答案

您似乎想要一个优先级查询,table1 优先于 table2。在 MySQL 中:

select t1.id, t1.name, t1.date
from table1 t1
union all
select t2.id, t2.name, t2.date
from table2 t2
where not exists (select 1 from table1 t1 where t2.id = t1.id);

这会从 table1 中选择所有行,然后从 table2 中选择在 table1 中没有匹配的 id 的所有行

这假设 id 足以确定哪些记录是“重复的”。

关于mysql - 创建 View 连接两个具有相同列且没有重复的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586932/

相关文章:

c# - 有没有办法在 SQL 数据库中搜索相似词(意思是不相同的词)?

mysql - 在 Docker 容器中运行 Spring Boot 应用程序,无法连接 MySQL

sql - 是否可以使用模式匹配从 Oracle SQL 数据库中选择列?

javascript - JSON 数据的 SQL 样式 JOIN

MySQL:对于表中的每一行,更改另一个表中的一行

MySQL 将行加载到字符串内容

python - LOAD XML INFILE 将嵌套子项保存为普通文件

php - 在 mySQL 中存储时间戳

SQL 查询帮助 (Postgresql)

php - 绕过 mysql_real_escape_string() 的 SQL 注入(inject)