SQL - 一次只应用一组连接

时间:2016-06-17 09:32:31

标签: sql-server tsql

我的查询中有三个连接。我的要求是,如果前两个连接得到满足或第三个连接得到满足,则选择记录

Movie objMovie = new Movie();
objMovie.setMovieName("Movie Name");
objMovie.setTrailerUrl("Trailer URL");
movieArrayList.add(objMovie);

但是当然它会试图满足所有联合。

如果前两个连接满足或者最后一个连接满足,我有什么办法可以选择记录吗?

更新

我尝试将它们作为条件放置,但随后查询将永远运行

3 个答案:

答案 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