0

私の要件は、同じデータベース内の同じスキーマを持つ 2 つの異なるテーブル間でデータを比較する必要があることです。

現時点では、同じテーブルの異なるフィールドで比較を行っています。検証に失敗した場合、エラーは次のような 1 つのテーブルに格納されます。

      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;

同じ要素の2つのテーブルでやりたいのと同じ種類の比較(いいえ)

         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 つのクエリまたはトリガー内にある必要があります

4

1 に答える 1

0

私は本質的に3つのケースを見ます。

  1. IDは同じでもデータが違う

  2. table_a の ID が table_b にありません

  3. table_b の ID が table_a にありません

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 に答える