【问题标题】:Select from view and join from one table or another if no record available in first如果第一个没有可用记录,则从视图中选择并从一个表或另一个表中加入
【发布时间】:2015-05-26 17:57:16
【问题描述】:

我有一个视图和两个表。表一和表二的列相同,但表一的记录数很少,表二的数据旧且记录数很大。

我必须将这两个表加入一个视图,才能从表一中获取最新数据;如果视图中的记录在表一中不可用,那么我必须从表二中选择记录。

如何使用 MySQL 实现这一点?

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

【问题讨论】:

  • MySql 和 Sql Server 不是一回事
  • 你有唯一的ID吗?
  • 是的,我们有唯一的 id...
  • 我们应该使用任何 case when 声明相同吗?或任何while循环?它在我的 sql 中可用吗?

标签: mysql mysql-workbench mysqldump


【解决方案1】:

只需对结果进行简单的 UNION,不包括 table2 中已在 table1 中提到的记录:

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

【讨论】:

  • 感谢@Peter 的宝贵建议 :)
【解决方案2】:

类似的东西。

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

【讨论】:

  • 感谢@Fireblade 的宝贵建议:)
【解决方案3】:

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

【讨论】:

  • 感谢您的重播。视图有 4 个连接,而不是来自这两个表。但映射列可用。
  • 例如,视图正在获取5条记录(1,2,3,4,5),这5条​​记录可能在表a中也可能不可用,首先我们必须得到匹配表 a 中的记录,如果在记录 a 中找不到记录,则我们必须从表 b 中获取。
猜你喜欢
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 2013-08-21
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多