例として、
select *
from
TYM00010 t10,tym00011 t11
where
t11.BILL_DATA_HOUSE_END=t11.BILL_DATA_HOUSE_END
and
t10.ERR_NUM=t11.ERR_NUM
こんなsql文がある。
テーブルが書いてあるテキストを見て検索することにします。
tab区切りになっているとします。
FORMAT.txt
テーブル名 カラム名 属性 ○はプライマリーキー
TYM00010 CONFIDENCE_NUM NUMBER 5 ○
TYM00010 ERR_NUM NUMBER 5 ○
TYM00010 BILL_DATA_HOUSE_END NUMBER 5 ○
TYM00010 INSIDEWEB_FLG CHAR 1
tym00011 CONFIDENCE_NUM NUMBER 5 ○
TYM00011 ERR_NUM NUMBER 5 ○
TYM00011 BILL_DATA_HOUSE_END NUMBER 5 ○
TYM00011 INSIDEWEB_FLG CHAR 1
なんかいい方法があったらお願いいたします。
どなたかご教授していただければ本当に幸いです。
よろしくお願いいたします。
t11.BILL_DATA_HOUSE_END=t11.BILL_DATA_HOUSE_END
の箇所は
t10.BILL_DATA_HOUSE_END=t11.BILL_DATA_HOUSE_END
にしたほうがいいでしょう。
さまざまなSQLを保持するリストを解析して、結合条件が足りないSQLを検出する。
結合条件を確かめる情報として format.txt を参照してください。
という処理ですよね?
それ(format.text)だけの情報では無理ではないでしょうか?
さしあたり、この程度の前提条件が必要かと思います
「プライマリキー同士以外での結合は行わない」
「同じ名前の列は、必ず同じ意味の列である(→違う列は意味の違う列である)」
「複合キーとなっている列数が違うテーブル同士の結合は行わない(もしくは、行っている場合は妥当性にかかわらずNG)」
前提条件があるとして
ざっくりとこんな処理になると思います
kimu_507 さんのやり方とほぼ変わりませんね・・・
なるほどですね、すごく参考になりました。本当に有難うございます。これからもよろしくお願いします
まずはER図について勉強することを薦めます。
TYM00010の1レコードに対し、TYM00011は何レコードあるのかを考えましょう。
1:1でしょうか? 1:N でしょうか? 1:0は ありうるのでしょうか?
1:1(1:0も含む)であるならTYM00011の一意キー(プライマリキーは一意キーのひとつです)が結合条件になるでしょう。
お書きのテーブルレイアウトをみると、プライマリーキーは3つの列からできているので、結合条件も3つあるはず、と考えます。
http://ja.wikipedia.org/wiki/%E5%AE%9F%E4%BD%93%E9%96%A2%E9%80%A...
すみません 書き間違いです。
t11.BILL_DATA_HOUSE_END=t11.BILL_DATA_HOUSE_END
の箇所は
t10.BILL_DATA_HOUSE_END=t11.BILL_DATA_HOUSE_END
として考えてください。