2012-04-23 132 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( )。您仍然需要每个查询来生成具有相同数据类型的相同列,但是,因此您可能需要将圆钉转换/转换为方形柱形孔。