2016-07-13 13 views
0

私は2つの異なるデータベースを持っています。両方とも、果物と呼ばれるテーブルがあります。今、私は第1のデータベースに関して第2のデータベースを更新したいと思う。このために、最初のデータベースのすべての列の値(ID列を除く)を2番目のデータベースの各行と比較し、差がある行を取得します。私が使っているクエリは2つの異なるデータベースの2つのテーブルの行を比較します

SELECT A.* FROM db1.Fruit A 
      Left Outer Join Fruit B ON 
      (A.Ratings = B.Ratings AND A.Name = B.Name AND A.Color = B.Color) 
where B.Ratings IS NULL OR B.Name IS NULL OR B.Color IS NULL 

Table in the first databaseTable in the second databaseです。

結果では、名前がKiwiで色が緑色のID 3の行が表示されます。しかし、それはまた、他の列がnullであるID 4のバナナを持つ行を示しています。そして、私のクエリでは、返す行がB.Ratings IS NULL or B.Color IS NULLの場合に書き込みます。

したがって、IDの列を除くすべての列で表1の1行から1行を比較し、列の値に不一致がある行を戻す方法はありますか。

+2

ようこそ。コードは、英語への翻訳の代わりにコードを読むときに最もよく理解されます。 [MCVE]を入力してください。 – user463035818

答えて

0
私は が編集:)混同されています

: 私は私の最初の応答に戻ってき

SELECT A.* 
FROM db1.Fruit as A JOIN db2.Fruit as B ON 
(A.Name = B.Name AND A.Color = B.Color) 
WHERE A.Rating <> B.Rating 

だろうが、左側にヌル(そして、あなたはそれの右の一部が表示されて行を与えるLEFT OUTER JOIN );これはあなたがしたいことではありません(少なくとも私の現在の理解です)。 このステートメントはあなたに与えます:db2と同じ名前と色を持っていますが、Ratingとは異なるdb1に関する情報(私はあなたが得たいと思ったものです)。 列の組み合わせを変更する場合は、結合を変更する必要があります。

+0

内部結合は、両方で異なる行を与えます。私は最初にそこにあるものだけが必要で、2番目にはないものが必要です。だから私は使うべきですか?また、<>演算子の使用方法を知りたいと思っていました。評定や名前や色が異なる場合は、B.Name <> A.NameとB.Color <> A.Colorのどちらを実行すればよいでしょうか? –

+0

私は最初にそこにあるが、2番目のデータベースにはない行を取得したい。また、私は列の組み合わせに基づいて行を選択したい。私はEXCEPTまたはMINUSコマンドを使ってそれを行うことができましたが、その問題はすべての列を比較することです。 ID列を比較したくない(IDは異なるが、残りの列値は同じでなければならない)。また、両方のデータベースのそれらの列で値がnullの場合、その行を返さないでください。上記のコマンドは、両方の値がその列のNULLである行を返します。どうやってやるの ? –

関連する問題