Oracle
處理多個 AND 條件的 SQL
我有以下數據:
我有一個列錶框,因此使用者可以選擇多個 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 語句中計算變數的長度。