如果第一个没有可用记录,则从视图中选择并从一个表或另一个表中加入
Posted
技术标签:
【中文标题】如果第一个没有可用记录,则从视图中选择并从一个表或另一个表中加入【英文标题】: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 中可用吗? 【参考方案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 中获取。以上是关于如果第一个没有可用记录,则从视图中选择并从一个表或另一个表中加入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 如果两个特定字段都为空,则从视图中排除记录