2012-04-23 168 views
-3

嗨我想獲得結果爲每個以下查詢到一個查詢。我知道我可以做一個聯盟,但我想知道是否有更好的方法,因爲每個表都有不同的列?由於需要幫助寫一個查詢

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 2012-04-23 23:09:28

+1

我認爲UNION是最好的方式去... – 2012-04-23 23:10:21

+0

而你正在尋找與許多列(RoleId,PlatformId,...)或許多行與一列的一行? – pilotcam 2012-04-23 23:12:00

回答

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所說,DISTINCTs是不必要的。除非作者使用UNION ALL,否則在這種情況下會自動丟棄模式。 – DaveE 2012-04-23 23:58:10

+0

你的權利,即使我說過。只是忘了刪除它們..現在完成.. – TheRealTy 2012-04-24 00:03:32

-1

除了已經提到的,你可以使用一個多語句表值函數工會:定義一個表變量,並從您的查詢的衆多SELECT INTO,然後選擇*從使用functionName( )。您仍然需要每個查詢來生成具有相同數據類型的相同列,但是,因此您可能需要將圓釘轉換/轉換爲方形柱形孔。