Oracle

處理多個 AND 條件的 SQL

  • February 3, 2022

我有以下數據:

我有一個列錶框,因此使用者可以選擇多個 Cred_type,他們希望能夠選擇 OR 或 AND 條件。

對於 OR 我有這樣的 AND CRED_TYPE IN (1,2)

對於AND,我真的很摸不著頭腦。他們的意思是他們想要一份具有 cred type 1 和 cred_type 2 的機構列表。也許我沒有清楚地思考,但這是逐行的,所以這樣做不會導致任何結果。

AND cred_type = 1 AND cred_type = 2 - 你不能讓單行有兩個不同的值,這將不會返回任何結果。

他們要求使用者可以選擇 10、20 或更多,因此為每個編寫一堆程式碼並將它們全部組合起來真的很困難 - 但這是我迄今為止唯一的想法。會是這樣

Select institution_no from table where cred_type = 1
UNION 
Select institution_no from table where cred_type = 2

– 這將結合兩者並得到我想要的,但你可以想像其中 10 或 20 個的所有程式碼。

您可以使用HAVING子句。

例如:如果您有一個信用類型為 1、2、3、4、5、6 的機構列表,您可以嘗試以下操作:

select institution_no 
from table 
where cred_type in (1,2,3,4,5,6)
group by institution_no
having count(distinct cred_type)=6;

編輯:使用的查詢OP

with cte as ( 
            select distinct institution_no, 
                   CERT_TYPE 
            from credentialing 
            where CERT_TYPE in (1,2)
            ) 
select institution_no, 
      count(institution_no) 
from cte 
group by institution_no 
having count(institution_no) = 2;

這是一個解決方案,您可以在其中建構 AND 查詢的 OR 查詢:

select distinct t2.institution_no from
(select t1.institution_no, count(distinct t1.cred_type) as cnt from
(select institution_no, cred_type from table_name where cred_type in (1,2,3,6,7)) t1
group by t1.institution_no) t2
where cnt=5
  • t1 只是 OR 查詢,但也列印出 cred_type
  • t2 計算不同 cred_types 的數量,在可接受的 creds 內
  • 決賽桌列印出擁有所有這些信譽的機構

這樣你只需要更新憑證列表,以及當他們請求一堆 cred_types 時的計數。如果您甚至不想每次都更新計數,您可以將 cred_types 列表設為變數,並將其放在 t1 中,同時在 where 語句中計算變數的長度。

引用自:https://dba.stackexchange.com/questions/306941