Select 从视图和从一个 table 或另一个加入(如果第一个没有可用记录)

Select from view and join from one table or another if no record available in first

我有一个视图和两个 table。表一和表二具有相同的列,但 table 表中的记录数量较少,而 table 表中的数据较旧且记录数量庞大。

我必须加入这两个 table 的视图才能从 table 一个获取最新数据;如果视图中的记录在 table 中不可用,那么我必须 select 来自 table 的记录。

如何使用 MySQL 实现此目的?

通过在互联网上进行一些研究,我了解到我们不能在 from 子句中应用完全连接和子查询。

只需要对不包括表1中已经提到的表2中的记录的结果进行简单的UNION:

SELECT * FROM table1
UNION
SELECT * FROM table2
WHERE NOT EXISTS (SELECT * FROM table1 WHERE table2.id = table1.id)

像这样。

SELECT *
FROM   view1 V
       INNER JOIN (SELECT COALESCE(a.commoncol, b.commoncol) AS commoncol
                   FROM   table1 A
                          FULL OUTER JOIN table2 B
                                       ON A.commoncol = B.commoncol) C
               ON v.viewcol = c.commoncol 

如果您使用的是 Mysql,请在此处勾选以模拟 Full Outer Join in MySQL

您是否正在尝试更新两个表的视图,其中视图中的旧记录需要被表 1 中的 latest/updated 记录覆盖,而表 1 中不存在的记录需要从表 2 中追加? ,或者您是从两个表创建视图吗?