みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1テーブル内レコードの各フィールド値の差分チェック

お世話になります。

現在、1テーブル内をログテーブル用として利用しています。

JSPでフォームを作成して各フィールド値を、
Webサイト画面上から変更可能なつくりにしており、
複数あるいずれかのフィールドの値を1つ以上変更してから、
[保存]ボタンを押下した際に、
  ↓
その変更前のレコード1件と、
変更後のレコード1件を、
同じログ用テーブル内へフラグ(変更前:0、変更後:2)を
それぞれ変えて、
INSERT INTOでレコードを計2件追加しています。
(あわせて、追加時のタイムスタンプをセットするフィールドもあるので、
 どんどんレコードを追加可能な仕様です)

そこでご質問なのですが、
この2つのレコードのみを比較して、
値が異なるフィールド名のみを、
(ときには複数フィールドにおいて値が異なるケースも有ります)
SELECTなどで表示させるようなSQL文の
作り方をご存じの方がいらっしゃいましたら、
ぜひ教えてください。

なぜこのようなご質問をさせていただいたかと申しますと、
ログテーブル内の上記した2件のレコードを比較して、
どこのフィールドの値が変更されたか?
を確認する際に利用したい為です。
(確認時には、phpMyAdminツールなどで直接SQL文をたたいて実行予定です)

以上、宜しくお願い致します。

投稿日時 - 2011-01-14 18:49:25

QNo.6447685

すぐに回答ほしいです

質問者が選んだベストアンサー

チェック用なら、以下のSQLでもいいんではないでしょうか。

select
concat(
case when a.c1=b.c1 then '' else concat(' c1:',b.c1) end
,case when a.c2=b.c2 then '' else concat(' c2:',b.c2) end
,case when a.c3=b.c3 then '' else concat(' c3:',b.c3) end ) compare
from a,b where キー条件~

投稿日時 - 2011-01-14 21:46:27

お礼

お世話になっております。

concatやcase whenやcompareというものがSQL文で利用できる物として、
存在していることすら不勉強で存じ上げませんでした。
来週早々に、開発環境にてさっそく試してみます。
ご回答ありがとうございました。

投稿日時 - 2011-01-14 23:20:48

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

-----------------------------------------------------
      | フィールド1 | フィールド2 | フィールド3 | フィールド4 |フラグ
-----------------------------------------------------
レコード1 | 1       | 11      | 111     | 1111    | 0
レコード2 | 1       | 22      | 111     | 2222    | 2

というデータのときに [フィールド2]、[フィールド4] という列名のリストが欲しい、ということでしょうか。

SELECT 文では無理でしょう。phpMyAdmin で結果を知りたいのであれば、ストアドプロシージャを組むしかないですね。

投稿日時 - 2011-01-14 21:11:01

補足

お世話になっております。

アウトプットのイメージと致しましては、
今回ご回答いただきました内容が、
私のイメージと同じでした。

もしよろしかったら、
ストアドプロシージャで組むカンタンな例など
教えていただけましたら助かります。

以上、宜しくお願い致します。

投稿日時 - 2011-01-14 23:15:15

お礼

いろいろと教えていただきまして、
ありがとうございました。

投稿日時 - 2011-01-21 17:32:38

ANo.1

こんばんは。

結果セットとしては、どのように表示したいのでしょうか?
・両方のレコードを出し、差分がないカラムはNULL
・更新後のレコードのみ出力し、差分がないカラムはNULL
など・・・。

アウトプットがイメージできないので、SQLが書けないです。

投稿日時 - 2011-01-14 20:49:37

補足

お世話になっております。

アウトプットと致しましては、
上記「No2」でご回答をshitaba様よりいただきました
内容と同じことを、私の方ではイメージ致しております。


以上、宜しくお願い致します。

投稿日時 - 2011-01-14 23:10:01

お礼

お世話になりました。
ありがとうございました。

投稿日時 - 2011-01-21 17:33:19

あなたにオススメの質問