繁体   English   中英

根据与另一个表进行比较的条件向表中插入新行数据

Inserting a new row of data into a table based on condition that compares with another table

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个跟踪器表,用于跟踪与我们的客户相关联的特定数字,称为“跟踪器”。 该表如下所示:

customer_id    value     date_of_value
11111            2          2020-12-14
23332            6          2021-01-15

该表从另一个名为“值”的表中获取此信息,该表与上述表完全相同,但没有 date_of_value 列。 该表每天都在不断更新,与客户关联的价值会被新的价值覆盖。 我希望能够做的是创建一个小作业,以便“跟踪器”表查看“值”表以查看值是否已更新。 如果是这样,我想在“跟踪器”表中插入一个新行,其中包含客户的 ID、新值和值更改的日期。 在我看来,查询看起来像这样:

CASE WHEN Tracker.value != Values.value
   THEN INSERT INTO Tracker (customer_id, value, date_of_value)
   VALUES (Values.id, values.value, GETDATE())

我尝试将它与 UPDATE 语句一起使用,但它们都不起作用。 理想情况下,“跟踪器”表将如下所示:

customerr_id    value      date_of_value
11111             2           2020-12-14
2332              6           2021-01-15
11111             3           2021-01-22
2332              8           2021-01-24 

如何设置此查询,以便在创建作业时插入带有更新信息的新行? 当我尝试使用 UPDATE 方法时,它覆盖了“Tracker”表中的信息。

2 个回复

嗯。 . . 您需要tracker表中的最新值。 然后将其与现有值进行比较并在存在差异的地方插入:

INSERT INTO Tracker (customer_id, value, date_of_value)
    SELECT v.customer_id, v.value, GETDATE()
    FROM (SELECT v.*,
                 ROW_NUMBER() OVER (PARTITION BY v.customer_id ORDER BY v.value DESC) as seqnum
          FROM values v
         ) v LEFT JOIN
         Tracker t
         ON v.customer_id = t.customer_id AND
            v.value = t.value
    WHERE v.seqnum = 1 AND t.customer_id IS NULL;

我们可以在主表上创建一个触发器来向跟踪表中插入一个新行:

CREATE TRIGGER trg_Tracking
ON MainTable
AFTER INSERT, UPDATE AS

IF (NOT UPDATE(value) OR NOT EXISTS
    (SELECT customer_id, value FROM inserted
    EXCEPT
    SELECT customer_id, value FROM deleted))
    RETURN;        -- early bail-out if we can

INSERT Tracker (customerr_id, value, date_of_value)
SELECT customer_id, value, GETDATE()
FROM (
    SELECT customer_id, value FROM inserted
    EXCEPT     --make sure to compare inserted and deleted values (AFTER INSERT has empty deleted values)
    SELECT customer_id, value FROM deleted
) changed;

GO     -- No BEGIN and END as the whole batch is the trigger
4 将数据库值与另一个表中的行数进行比较

对于第一个表中的每个项目,都有一个“ numberOf”字段。 此字段的值在相关表中必须具有相同数量的行。 这些就像预订行,因此多个用户可以同时预订该项目。 这种同步有时会消失,并且行数比'numberOf'字段变量多,反之亦然。 所以我想显示一个表,该表从第一个表输出“ numbe ...

2009-09-25 15:07:45 2 725   php/ mysql
5 将表中的 >1 行数据插入到另一个 TempTable

由于结果返回超过 1 行,因此无法INSERT INTO @TEMP_ROW表。 我希望所有行都插入到@TEMP_ROW表中。 我可以使用while循环吗? 如果是,如何? 还是有其他方法? 错误 : SQL Server 子查询返回了 1 个以上的值。 当子查询跟随 =、!=、< ...

6 根据另一个条件在表中插入新记录

我搜索了所有内容并提出了一个空白。 我正在尝试更新一条记录,并根据另一张表中的条件将其他记录插入到一​​张表中。 两个表都有一个公用的RecordID(一个nvarchar,因为它们包含字符)。 最容易用英语解释: 如果记录ID1在表A的ColumnA AND ColumnB ...

7 如何根据另一个表上的条件将数据插入表中

我必须根据对另一个表的限制在表的一列中插入值。 这些是条件。 我有两个表A和B。 A有a列,且a列中的值取决于表B中的值。假设B中有b,c,d列。现在条件是这些条件,如果d ='Y'的值,则a中的值为1 ,如果b&c中的值与a的值相同,则值为2,否则值为3。 所以我写了这段代码。 A和 ...

2016-06-09 10:47:51 1 609   mysql
9 从另一个表视图插入表视图行数据?

所以我有两个表视图。 MainTableView和SecondaryTableView , MainTableView有没有文本的空行。 虽然配置了表视图单元格。 这些行可以选择删除。 SecondaryTableView行也有一种编辑样式,我使用该样式将所选行添加到MainTableView行 ...

10 循环mysql查询以从一个表中获取多行数据并插入另一个表中

我正在做一个小项目,循环MySQL插入时遇到一些问题。 我目前有2个数据库表。 我正在从一个获取另一个的信息。 数据表: 所以我得到的数据很好。 仅当id为{20}时才插入数据。我目前有2行ID_2 = 20,但它仅插入一行,而不能同时插入两行。 这是我的插入查询。 ...

2014-05-19 12:17:21 1 310   php/ mysql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM