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

Postgresql 比较同一数据库中表之间的数据,postgresql,Postgresql,我的要求是我必须比较同一数据库中具有相同模式的两个不同表之间的数据 目前,我正在同一个表中的不同字段中进行比较,如果某些验证失败,错误将存储在一个表中,如下所示: IF (NEW.vision IS NULL and new.vispres IS NOT NULL) THEN INSERT INTO exception_detail( noces,exception) VALUES

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

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

      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);
我想它会给出两个表中NOCE相同的所有记录

在接下来的部分中,我想比较输出的每一行,如果数据不相同,它必须抛出异常,是否存在如下可能性:

         foreach row of above output{

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

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

         } 

但这一切都必须在一个查询或触发器中进行

我将研究三种情况

ID相同,但数据不同

在表_b中找不到表_a中的ID

在表a中找不到表b中的ID

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;

可以将此代码折叠成一个case和一个完整的外部联接,但这应该给您一个基本的想法。

此代码是否在插入/更新触发器中?它在插入后创建触发器acui或在acuit上为每行执行过程acu更新;因此,当您在acuit中插入或更新记录时,将调用触发器,新的acuit行将作为新的可用行;表2不参与acuit的更新-此时您希望通过表2.new引用表2中的哪一行?您需要自己从表2中选择所需的内容。我想引用表2中当前编号5的同一行,但如果我使用SELECT,我如何使用它进行比较,就像我现在所做的一样?我应该写什么来代替表2.new.vispress?你能举一个例子在同样的情况下使用select吗。谢谢,请帮忙,我没有得到确切的答案