我的查询中有三个连接。我的要求是,如果前两个连接得到满足或第三个连接得到满足,则选择记录
Movie objMovie = new Movie();
objMovie.setMovieName("Movie Name");
objMovie.setTrailerUrl("Trailer URL");
movieArrayList.add(objMovie);
但是当然它会试图满足所有联合。
如果前两个连接满足或者最后一个连接满足,我有什么办法可以选择记录吗?
更新
我尝试将它们作为条件放置,但随后查询将永远运行
答案 0 :(得分:0)
回答这个问题:
我有什么方法可以选择记录的条件 如果前两个连接满足或者最后一个连接是否满足?
不,我知道在单个查询中无法做到这一点。
如果第一个连接没有返回记录,则可以编写此方法以便仅执行第三个连接,这是一个填充临时表或表变量的多查询系列:
INSERT INTO #tmp
SELECT (the first join);
IF (SELECT COUNT(*) FROM #tmp) = 0
INSERT INTO #tmp
SELECT (the second join);
SELECT * FROM #tmp;
答案 1 :(得分:0)
WITH FirstJoin AS (
select * from security.requestview r
left join security.RequestDelegateView rd on r.id = rd.RequestId
join (select top 1 PersonnelNumber from SECURITY.MyRolesView) m on (m.PersonnelNumber=r.RequestorId or m.PersonnelNumber=r.InitiatorId or m.PersonnelNumber=rd.DelegatePersonnelNumber)
), SecondJoin AS (
select * from security.requestview r
join (select substring(ltrim(DDSUCode),0,3) as Division from security.staffview where PersonnelNumber = (select top 1 PersonnelNumber from SECURITY.MyRolesView)) s
on r.OrganizationUnitRefId like s.Division+'%'
), BothJoins AS (
SELECT * FROM FirstJoin
UNION ALL
SELECT * FROM SecondJoin
)
SELECT DISTINCT * FROM BothJoins
要使其工作,您需要更改CTE内的“Select *”,以便命名每个返回的列。 (因为我不知道你的桌子里有什么我不能这样做的。)
请注意,FirstJoin和SecondJoin需要返回相同的列。
答案 2 :(得分:0)
select *
from table1
left join table2
on table1.id = table2.t1
left join table3
on table1.id = table3.t1
left join table4
on table1.id = table4.t1
where table2.t1 is not null
or table3.t1 is not null
or table4.t1 is not null