|
▼pon さん:
こんにちは。
>ADPのクエリ結果のレコード件数が117,820件
SQLを見る限りですが
T単価テーブルとの左外部結合を行っているだけなので
結果は必ずT単価テーブルのレコード数と一致しなければいけないですよね。
こういったレコード件数の多いMDBのテストとして
郵政公社が提供している郵便番号データを使う事があるのですが
12万を超える件数でも pon さんの様な事象にあった事がありません。
(仕事柄、スペックの高いマシンを使っていますが…)
根本的な解決ではないのですが気になる点として、
クエリの中でクエリを呼び出している箇所があるので
そちらを纏めてみたら結果はどうなりますでしょうか。
SELECT T単価.*
,T1.名称
,T2.名称
,T3.名称
,T4.名称
,T5.名称
,T6.名称
,T7.名称
FROM ((((((((((T単価
LEFT JOIN LT部位
ON T単価.部C = LT部位.部C)
LEFT JOIN LT単位
ON T単価.単位C = LT単位.単位C)
LEFT JOIN LT名
ON T単価.区C = LT名.区C
AND T単価.工種1C = LT名.工種1C
AND T単価.工種2C = LT名.工種2C
AND T単価.工種3C = LT名.工種3C)
LEFT JOIN LT仕様 AS T1
ON [T単価].[仕様C1] + 1000 = [T1].[仕区C]*1000+[T1].[仕様C]
AND [T単価].[工種1C] = [T1].[工種C])
LEFT JOIN LT仕様 AS T2
ON [T単価].[仕様C2] + 2000 = [T2].[仕区C]*1000+[T2].[仕様C]
AND [T単価].[工種1C] = [T2].[工種C])
LEFT JOIN LT仕様 AS T3
ON [T単価].[仕様C2] + 2000 = [T3].[仕区C]*1000+[T3].[仕様C]
AND [T単価].[工種1C] = [T3].[工種C])
LEFT JOIN LT仕様 AS T4
ON [T単価].[仕様C2] + 2000 = [T4].[仕区C]*1000+[T4].[仕様C]
AND [T単価].[工種1C] = [T4].[工種C])
LEFT JOIN LT仕様 AS T5
ON [T単価].[仕様C2] + 2000 = [T5].[仕区C]*1000+[T5].[仕様C]
AND [T単価].[工種1C] = [T5].[工種C])
LEFT JOIN LT仕様 AS T6
ON [T単価].[仕様C2] + 2000 = [T6].[仕区C]*1000+[T6].[仕様C]
AND [T単価].[工種1C] = [T6].[工種C])
LEFT JOIN LT仕様 AS T7
ON [T単価].[仕様C2] + 2000 = [T7].[仕区C]*1000+[T7].[仕様C]
AND [T単価].[工種1C] = [T7].[工種C])
>何かアドバイス有りましたらよろしくお願い致します
既に出来上がってしまっている
データベースに対しては難しいのですが
>> 名称 仕様C1 仕様C2 仕様C3
>> AAA 100 200 300
のようなデータの持ち方でなく、
>> 名称 仕様 データ
>> AAA C1 100
>> AAA C2 200
>> AAA C3 300
の様に正規化をすると色々改善されるかもしれませんね。
|
|