同一VerのREALとBATCHという二つのD/Bがあります。
実表はREAL側にあり、BATCH側にはREALに向けたD/B linkとremote synonymを実表と同名で作成しています。
REALからもBATCHからも同じように結果が得られるような構成です。
しかし、以下のSQLを両D/Bから実行すると結果が異なります。
実表のあるREALの実行結果が正しく、BATCHでの実行結果(0件)は正しくありません。
D/Blinkやsynonymには問題が無い(SQLで呼び出す各表のcountは正しく返す)ので、SQL文自体に禁じ手のような問題があるような気もしますが、SQLに精通しておらず、また作成者不在のため困っております。
select
E.契約番号,
A.商品番号,
A.購入価格 as 商品明細_購入価格,
B.購入価格合計 as 商品情報_購入価格,
B.商品明細数
from EIGYO管理情報 E,
EIGYO商品管理情報 C,
EIGYO商品情報 A,
(select 商品番号,sum(購入価格) as 購入価格合計,count(*) as 商品明細数 from EIGYO商品明細 group by 商品番号 ) B
where A.商品番号=B.商品番号
and A.購入価格<>B.購入価格合計
and E.契約番号 = C.契約番号
and C.商品番号 = A.商品番号
and E.制御コード IS NULL
/
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>一つ判明したのですが、最後の「and E.制御コード IS NULL」を抜くと結果は同じ(2行選択)になりますが、
>入れると結果に相違(2行選択と無し)が出ます。
>is nullの解釈がremote表の操作だと変わるのでしょうか?
>ただ、is nullの対象レコードの結果比較は同じになります。
問題点は絞られましたが、DBリンク経由のシノニムでNull値がかわるとは聞いたことがありません。
以下をお勧めします。
(1)dump(E.制御コード)で、実際の値になにが入っているのかを調査
(2)トレースを取ってOracleサポートへ問い合わせ
この回答への補足
病欠しておりました。
最後の質問です。
local処理とremote処理の順序により条件の順序や解釈が変わってしまうという事はあるのでしょうか?
sqlplusで返ってくる結果を見ていると、remoto処理の時は例えば「ブロック単位」のような結果の返し方になります。
「remote処理した結果をlocal側に保持した分だけを処理する」
「それをある一定の単位で全レコード分繰り返す」
local処理では条件を一纏めにして解釈するのが当たり前ですが、remoto処理だとこのルールが崩れる場合があるのでしょうか?
No.1
- 回答日時:
みたところ問題なさそうです。
全部、内部結合なので、テーブルの参照先が間違っていて
ちゃんとジョインできていないような気がします。
件数だけではなく、データの中身も同じかチェックしてください。
また、all_synonymsなどで参照先をチェックしてください。
あとはSQLを分解し、個別に実行して問題を切り分けます。
(1)AとCのジョイン
select
A.商品番号,
A.購入価格
from EIGYO商品管理情報 C,
EIGYO商品情報 A
whereC.商品番号 = A.商品番号
/
(2)A・CとEのジョイン
select
A.商品番号,
A.購入価格
from EIGYO管理情報 E,
EIGYO商品管理情報 C,
EIGYO商品情報 A
where E.契約番号 = C.契約番号
and C.商品番号 = A.商品番号
and E.制御コード IS NULL
/
(3)Bのサブクエリ内
select 商品番号,
sum(購入価格) as 購入価格合計,
count(*) as 商品明細数
from EIGYO商品明細 group by 商品番号
(4)AとBのジョイン
select
A.商品番号,
A.購入価格 as 商品明細_購入価格,
B.購入価格合計 as 商品情報_購入価格,
B.商品明細数
from EIGYO商品情報 A,
(select 商品番号,
sum(購入価格) as 購入価格合計,
count(*) as 商品明細数
from EIGYO商品明細 group by 商品番号 ) B
where A.商品番号 = B.商品番号
and A.購入価格 <> B.購入価格合計
/
どこで結果が異なるのかをチェックし、原因を探しましょう。
※本当にデータが同一でな場合、トレースを取ってoracleサポートに解析してもらうしかないかもしれません。
この回答への補足
提示いただいたSQLの結果はすべて同じ(spool結果の比較)になりました。
synonymは問題ありませんでしたが、念のためD/B linkを別個に作って、
そのD/B link経由のsynonymに再作成して試しても結果に相違が出ました。
一つ判明したのですが、最後の「and E.制御コード IS NULL」を抜くと結果は同じ(2行選択)になりますが、
入れると結果に相違(2行選択と無し)が出ます。
is nullの解釈がremote表の操作だと変わるのでしょうか?
ただ、is nullの対象レコードの結果比較は同じになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- 国産バイク 大型バイク カワサキz900rsに付ける ヨシムラのマフラーの質問です、 【 商 品 I D 】14 2 2023/06/27 13:43
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) エクセルの表について 3 2023/04/14 18:00
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
沿線コード
-
CREATE テーブルでの複数外部...
-
Excelファイルのデータをテーブ...
-
SQLServer 日付が直前のレコー...
-
Access終了時の最適化が失敗?
-
Order by句でバインド変数を使...
-
GROUP BYを使ったSELECT文の総...
-
実績累計の求め方と意味を教え...
-
SQL文で素早くNULLを除外する方法
-
GROUP BYを行った後に結合した...
-
固定値を含む結合と複数テーブ...
-
キーが同じを複数行を1行にま...
-
Date型にNULLをセットしたい V...
-
DATE型にNULLをセットするには?
-
Accessで別テーブルの値をフォ...
-
unionの結果は集計はできないで...
-
SELECTの結果で同一行を複数回...
-
select句副問い合わせ 値の個...
-
Access でレコードセレクタが押...
-
ワードの差込印刷で教えて下さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
沿線コード
-
SQLServer 日付が直前のレコー...
-
Excelファイルのデータをテーブ...
-
10営業日前の日付を取得したい...
-
SQLの実行結果が異なる
-
SQLに関して
-
【SQL】またぎデータの検索の仕方
-
SQLにて縦を横へ展開
-
ヤマト急便のチェックデジット...
-
スペシャリストの方! 助けてく...
-
SQLで<>を使用するとき、
-
娘の学校から出た暗号解読です...
-
SQL GROUP BY
-
GROUP BYを行った後に結合した...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
おすすめ情報