我有两个不同的查询,它们具有完全相同的SELECT
和WHERE
条件,但是它们具有不同的JOIN
条件。
我正在尝试找到一种将两者结合为一个查询的方法,而我唯一想出的方法就是使用UNION
。有什么不同或更好的方法可以完成同一件事?
以下是我要执行的操作的示例:
create table #Account
(
ID int,
FirstName varchar(25),
LastName varchar(25),
CodeA int,
CodeB int
)
create table #AccountMap
(
CodeA int,
CodeB int,
MapType varchar(25)
)
insert into #Account
values (1, 'Bob', 'Smith', 424, 867), (2, 'John', 'Davis', 543, NULL), (3, 'Mary', 'Brown', 654, 345)
insert into #AccountMap
values (424, 867, '1-1'), (543, NULL, 'A Only'), (654, 345, '1-1'), (NULL, 391, NULL)
-- Query #1
select ID, MapType
from #Account A
join #AccountMap M on M.CodeA = A.CodeA and M.CodeB = A.CodeB
where MapType is not null
-- Query #2
select ID, MapType
from #Account A
join #AccountMap M on M.CodeA = A.CodeA
where MapType is not null
-- Combined results
select ID, MapType
from #Account A
join #AccountMap M on M.CodeA = A.CodeA and M.CodeB = A.CodeB
where MapType is not null
union
select ID, MapType
from #Account A
join #AccountMap M on M.CodeA = A.CodeA
where MapType is not null
drop table #Account, #AccountMap
我想要的输出是我提供的示例中组合查询的结果(两个查询的不同组合)。
答案 0 :(得分:2)
这样怎么样?
这将为您提供第一个(如果存在)和第二个(不存在)。
Select ID, COALESCE(M1.MapType, M2.MapType) as MapType
from #Account A
left join #AccountMap M1 on M1.CodeA = A.CodeA and M1.CodeB = A.CodeB
left join #AccountMap M2 on M2.CodeA = A.CodeA
where COALESCE(M1.MapType, M2.MapType) is not null
答案 1 :(得分:0)
您可以尝试一下。
Select ID,MapType from #account a left Join #AccountMap b
on a.CodeA=b.CodeA
or a.CodeB=b.CodeB