【问题标题】:trigger compare records and insert values from other table触发比较记录并从其他表中插入值
【发布时间】:2018-01-01 22:42:05
【问题描述】:

请告知以下动作的触发程序:

有 2 个表 table_1table_2 具有相似的列:col_a, col_b, col_c.

当在 PHP 语句中插入 table_1 (col_a) 某个字符串值时,它必须与 table_2 (col_a) 进行比较,如果它们相同,则必须将来自 table_2 (col_b, col_c) 的值插入到 table_2 (col_b, col_c)

请指教

【问题讨论】:

  • 将问题与您目前所制作的内容结合起来
  • UPDATE table_2 SET ((col_b, col_c) = SELECT FROM table_1 (col_b, col_c) IF table_1 (col_a) = table_2 (col_a)
  • 这是否意味着每个表只有一行?还是 table_1.col_a 的最后一个索引与 table2.col_a 的最后一个索引相比?
  • 我已删除冲突的产品标签。请添加您实际使用的那个。
  • 当然不止一个……对于每一行

标签: sql postgresql


【解决方案1】:

触发函数是这样的。您可以根据自己的列数据类型和名称对其进行自定义。

CREATE OR REPLACE FUNCTION fn_trgr() RETURNS trigger AS
  $BODY$
    DECLARE
      val_c TEXT;
      val_b TEXT;
    BEGIN
    SELECT DISTINCT col_b INTO val_b FROM table_1 WHERE col_a=NEW.col_a;
    SELECT DISTINCT col_c INTO val_c FROM table_1 WHERE col_a=NEW.col_a;

    NEW.col_b := val_b ;
    NEW.col_c := val_c ;

    RETURN NEW;
    END;
  $BODY$
LANGUAGE plpgsql

【讨论】:

  • 声明 val_b 文本; BEGIN SELECT DISTINCT street_54646.id_street INTO val_b FROM street_54646 WHERE street=NEW.street; NEW.id_street := val_b ;返回新的;结尾;生成警告:pg_insert():查询失败:错误:关系“street_54646”不存在第 1 行:...T DISTINCT street_54646.id_street FROM street_546... ^ QUERY: SELECT DISTINCT street_54646.id_street FROM street_54646 WHERE street=NEW。街道
  • 错误说它没有找到表 street_54646
  • 需要澄清确切的方式,包括架构:... FROM iota_cmac.street_54646 ...已解决
  • 很好。是的,如果您不使用默认的公共架构,则需要架构名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2019-08-10
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多