需要帮助编写查询

时间:2012-04-23 23:07:03

标签: sql sql-server

您好我正在尝试将以下每个查询的结果合并到一个查询中。我知道我可以做一个联盟,但我想知道是否有更好的方法,因为每个表有不同的列?感谢

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'

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:-1)

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