-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'
4

3 に答える 3

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'

注:私は個別の句を削除しました。ユニオンは結果をとにかく個別にするので、不要です。

于 2012-04-23T23:32:16.977 に答える
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

于 2012-04-23T23:35:34.900 に答える
-1

前述の共用体以外に、複数ステートメントのテーブル値関数を使用できます。テーブル変数を定義し、多数のクエリから SELECT INTO を選択してから、functionName() から * を選択します。ただし、同じデータ型の同じ列を生成するには各クエリが必要になるため、丸いペグを四角い柱状の穴にキャスト/変換する必要がある場合があります。

于 2012-04-23T23:47:06.977 に答える