具有多个WHERE子句的帮助,使用户可以通过任何一个进行搜索,而不会互相踩踏

问题描述 投票:0回答:1

我下面有简单的代码

SELECT
      c.account,
      c.apar_id,
      c.amount,
      c.client,
      c.dim_2,
      c.dim_7,
      c.due_date,
      c.ext_inv_ref,
      c.period,
      c.voucher_date,
      c.voucher_no,
      c.voucher_type,
      c.sequence_no,
      c.rest_amount
      FROM acutrans c
      LEFT OUTER JOIN aglrelvalue r6
      ON r6.client = 'WEBE' AND r6.attribute_id = 'A4' AND r6.rel_attr_id = 'ZG06' AND c.apar_id = r6.att_value

      WHERE 
      c.client = 'WEBE' 
      AND c.period <='202007'
      AND (c.apar_id IS NULL OR c.apar_id ='CL25791') 
      OR (r6.rel_value IS NULL OR r6.rel_value ='*')
      AND (c.dim_7 IS NULL OR c.dim_7 >='') 
      AND (c.dim_7 IS NULL OR c.dim_7 <='BR36')

用户希望能够通过以下任一方式搜索数据:c.apar_idr6.rel_valuec.dim_7

我似乎在测试中,是为了获取彼此不匹配的数据。非常感谢您的帮助,谢谢

sql where-clause
1个回答
0
投票

[ANDOR混合使用时,通常需要括号。我只能推测您真正想要的是什么,但类似:

WHERE c.client = 'WEBE' AND
      c.period <= '202007' AND
      (c.apar_id IS NULL OR c.apar_id = 'CL25791')  AND
      ((r6.rel_value IS NULL OR r6.rel_value = '*') AND
       (c.dim_7 IS NULL OR c.dim_7 >= '') AND
       (c.dim_7 IS NULL OR c.dim_7 <= 'BR36')
      )
© www.soinside.com 2019 - 2024. All rights reserved.