如果存在条目匹配,则 SQL 触发器从其他表中添加数据

Posted

技术标签:

【中文标题】如果存在条目匹配,则 SQL 触发器从其他表中添加数据【英文标题】:SQL Trigger to add data from other table if there is an entry match 【发布时间】:2017-06-29 17:13:54 【问题描述】:

我有两张桌子一张:

ID | TimeStamp | Data
---|-----------|------ 
1  | 10/10/2015| 54
2  | 11/10/2015| 493
3  | 12/10/2015| 293

和另一个:

ID | Interval | Location
---|----------|------ 
1  | 23       | New York
2  | 22       | London
3  | 21       | Paris

我想要一个SQL trigger,它在将新条目添加到第一个表时执行。然后trigger 会将两个表中的数据合并到另一个表中......就像这样:

ID | TimeStamp | Data | Interval | Location
---|-----------|------|----------|------ 
1  | 10/10/2015|    54| 23       | New York
2  | 11/10/2015|   493| 22       | London
3  | 12/10/2015|   293| 21       | Paris

我是 SQL 的新手,并且已经研究了触发器和加入请求。如果有人能指出我写查询的正确方向,那就太棒了。

【问题讨论】:

那么你的单表数据触发器是什么样子的? 您可能会重新考虑您的应用程序设计。我通常建议不要存储组合表,而是编写一个动态返回组合视图的视图。 【参考方案1】:

我认为在这种情况下正确的方法是使用连接(作为查询或创建视图),听起来像使用触发器并保留两次数据是多余的。

这里的join很简单,就是id字段的inner join:

SELECT f.ID, f.timestamp, f.data, second.location, second.interval from
  firstTable as f inner join secondTable as s on f.ID = s.ID;

如果您想将其作为视图,只需执行以下操作:

CREATE VIEW joinView AS
SELECT f.ID, f.timestamp, f.data, second.location, second.interval from
  firstTable as f inner join secondTable as s on f.ID = s.ID;

【讨论】:

非常感谢!当新条目进入第一个表时,是否有办法使此连接查询触发?还是这会自动发生? 输入新数据时什么都不会发生,这就是视图的思想——视图查询在视图被查询时执行,所以结果就是那一刻表中的任何结果跨度>

以上是关于如果存在条目匹配,则 SQL 触发器从其他表中添加数据的主要内容,如果未能解决你的问题,请参考以下文章

数据库触发器或代码中的常用方法?

如果在 Hive SQL 中找不到匹配项,则提供要加入的备用列

SQL连接(join)

SQL-JOIN链接

java JDBC sql server 判断一条信息是不是已存在表中,如果不存在则添加,如果存在则更新重要字段

Redis来啦~~