2012-03-10 37 views
-6

複数のSQL問合せを1つの問合せにまとめて、アプリケーションから複数のリクエストをデータベースに送信しないようにします(これらのデータを1回のショットですべて受信したい)。複数のSQLクエリを1つに結合する方法は?

ここ
1) select pin, officeNum, isVeteran from table18 where pin = 123; 

2) select streetAddress, apartmentAddress, cityAddress, stateAddress from table1 where case = (select case from table18 where pin = 123); 

3) select unitAddress, cityAddress, streetAddress, apartmentAddress from table5 where pin = 123; 

4) select unitAddress, cityAddress, streetAddress, apartmentAddress from table55 where seqNum = 0 and rfa = (select rfa from table18 where pin = 123); 

5) select unitAddress, cityAddress, streetAddress, apartmentAddress from table103 where histCode = 0 and case = (select case from table18 where pin = 123); 

6) select phone, email from table715 where histSeqNum in (select max(histSeqNum from table715)) 
     and histCode in (select max(histCode) from table715) 
     and case = (select case from table18 where pin = 123); 

は私のスキーマです:

(悪いデザインを言い訳してください、それはデータベースから20年前に作成されています、外部キーが存在しない)

-Table18(ピン(PK)、ケース、オフィスナム、ベテラン)

-Table1(ケース(PK)、caseOfficer、streetAddress、apartmentAddress、cityAddress、stateAddress)

-Table5(ピン(PK)、streetAddress、apartmentAddress、cityAddress、stateAddress)

-Table55(RFA(CompositeKey )、SEQNUM(CompositeKey)、rfaAddress、streetAddress、apartmentAddress、cityAddress、stateAddress)

-Table103(ケース(CompositeKey)、histCode(CompositeKey))

-Table715(ケース(CompositeKey)、histSeqNum(CompositeKey) 、histCode(CompositeKey)、電話番号、メールアドレス)

+2

あなたの質問は正確ですか? –

+0

@juergend。それは他の質問のためです... – gdoron

+0

スキーマを見ることなく少し難しいですが、サブセレクションを使って結合を実行しているように思えます。さらに情報を与えることができれば、まずあなたのスキーマをリバースエンジニアリングすることなく誰かが書き直すことができるはずです。 –

答えて

2

はUNION句ことができるセットを使用すると、これらの空白状態を気にしないならば、あなたもそこに(2)を入れることができます... (3,4,5)

select unitAddress, cityAddress, streetAddress, apartmentAddress 
from table5 where pin = 123 
union 
select unitAddress, cityAddress, streetAddress, apartmentAddress 
from table55 where seqNum = 0 and rfa = (select rfa from table18 where pin = 123) 
union 
select unitAddress, cityAddress, streetAddress, apartmentAddress 
from table103 where histCode = 0 and case = (select case from table18 where pin = 123); 

です。.. 。(私は賭けこれらのクエリを最適化すると、パフォーマンスは異なるでしょう: - :

例えば、2の書き込みで何かこれに類似し

select null unitAddress, streetAddress, apartmentAddress, cityAddress, stateAddress 
from table1 
where case = (select case from table18 where pin = 123); 
union 
select unitAddress, cityAddress, streetAddress, apartmentAddress, null 
from table5 where pin = 123 
union 
select unitAddress, cityAddress, streetAddress, apartmentAddress, null 
from table55 where seqNum = 0 and rfa = (select rfa from table18 where pin = 123) 
union 
select unitAddress, cityAddress, streetAddress, apartmentAddress, null 
from table103 where histCode = 0 and case = (select case from table18 where pin = 123); 

も参加するためにあなたのネストされた選択の再構築を検討してくださいT18は、ピンのインデックスを持っており、t1はケースにインデックスを持っていることを確認し、その後

select streetAddress, apartmentAddress, cityAddress, stateAddress 
from table1 t1, table18 t18 
where t1.case = t18.case 
and t18.123; 

に)あなたが探しているENCE。

3

できません。すべてのクエリは固定数の列を返します。このようにカラムを取得することが依然として求められている場合は、カラムのデータ型がすべてのクエリで同じであることを確認し、それらをユニオンと組み合わせてください。私はそれを勧めませんが、可能です。ここ

+0

なぜそれはできないのか分からないテーブルの。 –

+0

@DavidFaber今は、以前はなかった。 –

関連する問題