2012-04-23 19 views
-3

こんにちは、次の各クエリの結果を1つのクエリに取得しようとしています。私は組合をすることができますが、各テーブルに異なる列があるため、より良い方法があるかどうか疑問に思っていましたか?ありがとう質問を書くのに助けが必要です

select distinct RESOURCE_ID from USER_ROLES where TEST_IND ='Y' 

select distinct RESOURCE_ID from USER_PLATFORMS where TEST_IND ='Y' 

select distinct RESOURCE_ID from USER_COMPETENCIES where TEST_IND ='Y' 

select distinct RESOURCE_ID from USER_TECH_SKILLS where TEST_IND ='Y' 

select distinct RESOURCE_ID from USER_MGR_SKILLS where TEST_IND ='Y' 

select distinct RESOURCE_ID from USER_APPS where TEST_IND ='Y' 

select distinct RESOURCE_ID from BUS_PROCS where TEST_IND ='Y' 
+0

出力をどのように表示しますか?各行に異なる列があるクエリを記述する方法はありません。 – JohnFx

+1

私はUNIONが最善の方法だと思っています.... –

+0

あなたは、多くの列(RoleId、PlatformId、...)または1列の多くの行を持つ1つの行を探していますか? – pilotcam

答えて

1

UNIONクエリが必要ないと言っても、コメントに記載されている要件ではそれを排除するものはありません。選択した列がすべての表で同じである限り、表の列が異なる場合は問題ありません。

は、これはあなたが

select RESOURCE_ID from USER_ROLES where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_PLATFORMS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_COMPETENCIES where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_TECH_SKILLS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_MGR_SKILLS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_APPS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from BUS_PROCS where TEST_IND ='Y' 

注意を必要とするものである:私はそれが不必要であるので、とにかく、組合は明確な結果を行います明確な条項を取り出しました。

1

UNIONはここでは最適なオプションです。複製を保持したい場合は、結果セットから重複を自動的に削除します。UNION ALLを使用できます。すでに述べた組合以外

select RESOURCE_ID from USER_ROLES where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_PLATFORMS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_COMPETENCIES where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_TECH_SKILLS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_MGR_SKILLS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from USER_APPS where TEST_IND ='Y' 
UNION 
select RESOURCE_ID from BUS_PROCS where TEST_IND ='Y' 

UNION MSDN

+0

JohnFxによると、DISTINCTは不要です。このシナリオでは、ライターがUNION ALLを使用しない限り、Dupesは自動的に破棄されます。 – DaveE

+0

あなたの権利、私はそれを言った。それを削除するのを忘れてしまった。 – TheRealTy

-1

、複数文のテーブル値関数を使用することができます(functionNameをから*選択し、テーブル変数を定義し、クエリのあなたの多数からINTOを選択)。ただし、同じデータ型の同じ列を生成するためには各クエリが必要になるため、丸いペグを正方形の円柱の穴にキャスト/変換する必要があります。

関連する問題