比较同一数据库中的表之间的数据

时间:2012-10-18 14:48:56

标签: postgresql

我的要求是我必须比较同一数据库中具有相同模式的两个不同表之间的数据,

目前我在同一个表中的不同字段进行比较,如果某些验证失败,则错误将存储在一个表中,如:

      IF (NEW.vision IS NULL and new.vispres IS NOT NULL)                   
      THEN INSERT INTO exception_detail( noces,exception) VALUES                        
      (new.no,'please check the values if vision is null then vispres should also be null');
    END IF;

我想用同一个元素的两个表(没有)做同样的比较,例如

         IF (TABLE1.NEW.vispres IS NULL and TABLE2.new.vispres IS NOT NULL)                   
      THEN INSERT INTO exception_detail( noces,exception) VALUES                          
      (new.no,'please check the values if vispres is null for number 5 in table 1   then vispres should also be null for number 5 in Table 2 ');
    END IF;

请帮忙 提前谢谢

我可以这样做:

      SELECT q1.* FROM TABLE1 q1
       INNER JOIN TABLE2 q2 ON (q1.noces = q2.noces);

我认为它会给出两个表中noces相同的所有记录

现在继续我要比较输出的每一行,如果数据不相同则必须抛出异常,有可能是这样的:

         foreach row of above output{

          if (q1.name != q2.name)
          Do something ;

        if (q2.address < q1.address)
         Do something ;

         } 

但它必须在一个查询或触发器中

1 个答案:

答案 0 :(得分:0)

我基本上会看三种情况。

  1. ID相同,但数据不同

  2. table_b中的ID未在table_b中找到

  3. table_b中的ID未在table_a中找到

  4. SQL可能如下所示:

    SELECT (r).* FROM ( -- Wrapper query
       SELECT a as r
         FROM table_a a
         JOIN table_b b ON a.id = b.id AND a <> b
       UNION ALL
       SELECT a as r
         FROM table_a a
    LEFT JOIN table_b b ON a.id = b.id
        WHERE b.id IS NULL
       UNION ALL
       SELECT b AS r
         FROM table_b b
    LEFT JOIN table_a a ON a.id = b.id
        WHERE a.id IS NULL
    ) t;
    

    有可能将其折叠成一个案例和一个完整的外部联接,但这应该给你基本的想法。