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

注意:我取出了 distinct 子句, union 无论如何都会使结果变得不同,所以它是多余的。

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

联合 MSDN

于 2012-04-23T23:35:34.900 回答
-1

除了已经提到的联合之外,您还可以使用多语句表值函数:定义一个表变量并从您的众多查询中选择 INTO,然后从 functionName() 中选择 *。但是,您仍然需要每个查询生成具有相同数据类型的相同列,因此您可能需要将圆形钉转换/转换为方形柱状孔。

于 2012-04-23T23:47:06.977 回答