2017-07-28 5 views
0

両方のクエリを個別に実行すると、データを取得するのに4秒かかることはありませんが、両方を組み合わせるとクエリが死んでいるのが見えます。すべてのヘルプは非常にあなたはすべての3文の実行計画を見れば、あなたはそれを把握するよOracleパラメータの問題(OR Opeatorの使用)

Query1: Select Med_Number,Med_Code,Member_Name,DOB FROM Med WHERE Med.Med_Code=:Med_Code Query2: Select Red_Number,Red_Name,Red_Code FROM Red WHERE Red.Red_Code =:Red_Code Final One:Im passing one value at a time Select Med_Number,Member_Name,Red_Number,Red_Name FROM Med M LEFT JOIN Red R ON M.Med_Number=R.Red_Number Where (Med.Med_Code=:Med_Code) OR (Red.Red_Code=:Red_Code)

+0

MEDとRED(例えば、すべてのMEDのために0以上のREDがある)と、主キーと関連する外部キーとの関係を知ることが非常に役立つだろう。 – jeff6times7

+0

はい1つのMedにはTrueです。もっと多くの赤や0があります。 –

+0

[編集]ボタンをクリックすると、関係の情報を質問に入れる必要があります。実際のテーブルのプライマリキーと外部キーをポストに転記するには、sqldeveloperのようなものを使用することを強くお勧めします。 – jeff6times7

答えて

0

を高く評価しました。あなたがそれを見つけ出すことに関心がなく、1つのクエリだけを実行しなければならない場合は、srcを使用して、どの行の下位の行を決定し、その数と名前が適切であると仮定して同等のデータタイプ:もちろん

Select 1 src, Med_Number,Member_Name,DOB 
FROM Med 
WHERE Med.Med_Number=:Med_Number 
UNION ALL 
Select 2 src, Red_Number,Red_Name, null 
FROM Red 
WHERE Red.Red_Number=:Red_Number 

、データ型は等価であり、DOBがnullにすることが許可されていない場合は、m.Med_number上のあなたの2つのテーブルを結合すると、これは

Select Med_Number,Member_Name,DOB 
FROM Med 
WHERE Med.Med_Number=:Med_Number 
UNION ALL 
Select Red_Number,Red_Name, null 
FROM Red 
WHERE Red.Red_Number=:Red_Number 
+0

良いアイデアユーザーがフロントエンドに2つのパラメータを渡します。メド数が1で赤の2が2つのレコードを取得すると仮定します。しかし、フロントエンドから取り出すべき結果は1つだけです。私はあなたにそれを願っています。ありがとう。 –

+0

@ KotiRaavi SQL文のテキストを編集したときに、質問の意味が大きく変わった。 – jeff6times7

+0

ありがとうございます、私は別の列を使用して参加しています:(私は誰かから知っていることがあります。 –

0

を十分でしょう= R.Red_numberの場合、2つのパラメータは必要ありません。

Select Med_Number,Member_Name,Red_Number,Red_Name FROM Med M 
LEFT JOIN Red R ON M.Med_Number=R.Red_Number 
Where M.Med_Number=:Number; 
+0

Opps申し訳ありません、参加は別の列です。 –