0

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

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

      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 ;

         } 

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

4

1 回答 1

0

我会看三个案例。

  1. ID相同,但数据不同

  2. 在 table_b 中找不到 table_a 中的 ID

  3. 在 table_a 中找不到 table_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;

可以将它折叠成一个案例和一个完整的外部连接,但这应该会给你一个基本的想法。

于 2013-04-12T10:56:58.833 回答