Sql 其中嵌套查询中有两个独立的列

Sql 其中嵌套查询中有两个独立的列,sql,db2,Sql,Db2,我正在编写SQL过滤器,并且在User_条件内的空间有限,因此我想知道是否可以在运行嵌套查询之前使用OR 下面是一个基本代码的示例,也是我认为我正在努力实现的一个示例 select * from tlorder where detail_line_id = '3806526' and (origpc in (select zone_id from zone where (zone_id = origpc

我正在编写SQL过滤器,并且在User_条件内的空间有限,因此我想知道是否可以在运行嵌套查询之前使用OR

下面是一个基本代码的示例,也是我认为我正在努力实现的一个示例

select * 
from tlorder 
where detail_line_id = '3806526'
  and (origpc in (select zone_id 
                  from zone 
                  where (zone_id = origpc 
                    and service_type = 'DIRECT' or zone_id = destpc 
                    and service_type <> 'DIRECT'))
   or desctpc in (select zone_id  
                  from zone 
                  where (zone_id = origpc and service_type = 'DIRECT' or 
                         zone_id = destpc and service_type <> 'DIRECT')))
从and子句开始是筛选值,但我想知道是否有这样的选项:

select * 
from tlorder 
where detail_line_id = '3806526'
  and (origpc OR destpc) in (select zone_id 
                             from zone 
                             where (zone_id = origpc and service_type = 'DIRECT' or 
                                    zone_id = destpc and service_type <> 'DIRECT'))
-注:我无法编辑突出显示的部分,因此会带来最大的问题

( 
    origpc IN (SELECT zone_id FROM zone 
    WHERE (  (
            zone_id = origpc 
            AND service_type = 'DIRECT' 
            )
            OR
            (
            zone_id = destpc 
            AND service_type <> 'DIRECT'
            )
          )
    OR destpc IN (SELECT zone_id FROM zone 
    WHERE (  (
            zone_id = origpc 
            AND service_type = 'DIRECT' 
            )
            OR
            (
            zone_id = destpc 
            AND service_type <> 'DIRECT'
            )
          )
    )

根据您的屏幕截图,这应该会起作用。

最好的做法是将限制逻辑添加到子查询的where子句中,并将IN更改为EXISTS。事实上,您已经差不多做到了这一点,因为您正在筛选子查询中的行。这应该适合您:

select * 
  from tlorder 
 where detail_line_id = '3806526'
   and EXISTS (select 1
                 from zone 
                where (zone_id = origpc and service_type = 'DIRECT') or 
                      (zone_id = destpc and service_type <> 'DIRECT')
               )

不幸的是,这不起作用,过滤器的select语句和表格是一成不变的,因此您只能在X=X和….之后进行编辑。。。。。我将添加一个屏幕截图。对不起,我没有理解……是什么让他们一成不变?我提供的逻辑与您刚才以更简洁的方式执行的逻辑相同。我希望这不会太长。
select * 
  from tlorder 
 where detail_line_id = '3806526'
   and 123 in (origpc, destpc)