[英]If first condition is true then stop fetching from the other conditions in where clause of a SQL query
查詢:
where (table1.subject_1 like '%TEST1%' OR
table1.subject_1 like '%TEST2%' OR
table1.subject_1 like '%TEST3%' OR
table1.subject_1 like '%TEST4%'
)
OR
(table1.subject_2 like '%TEST1%' OR
table1.subject_2 like '%TEST2%' OR
table1.subject_2 like '%TEST3%' OR
table1.subject_2 like '%TEST4%'
)
在這里, if subject_1 = TEST1
則無需搜索其余條件,如果找不到,則搜索其他條件。
我需要一條包含上述查詢中subject_1
的記錄。 If subject_1
與任何結果都不匹配,則搜索subject_2
。
我的問題:從上述查詢中,返回多個記錄,其中subject_1
與TEST1
和TEST2
都匹配。
例:
no, name, add1, occ, date, subject_1,subject_2,Exclusion_number
-----------------------------------------------------------------------------
446 REBECCA street1 Y 1/1/2001 TEST1 AB 10
446 REBECCA street1 Y 1/1/2001 TEST2 A 11
我應該能夠以subject_1 like '%TEST1%'
獲取一行, subject_1 like '%TEST1%'
匹配項。 我不應該得到第二行,因為第一個條件已經滿足。
當前與我的查詢,我得到2行,要求只得到一行。
萬一第一個條件失敗,那么我應該檢查第二個條件subject_2,例如'%TEST2%'。
這將返回與任何條件匹配的第一行。
SELECT TOP 1 *
FROM TABLE1
where
(table1.subject_1 like '%TEST1%' OR table1.subject_1 like '%TEST2%' OR
table1.subject_1 like '%TEST3%' OR table1.subject_1 like '%TEST4%') OR
(table1.subject_2 like '%TEST1%' OR table1.subject_2 like '%TEST2%' OR
table1.subject_2 like '%TEST3%' OR table1.subject_2 like '%TEST4%')
OR
是完全相關的,並且是短路(給A or B
,如果A
是真的,那么B
是從來沒有檢查),這樣你的括號沒有做任何事情,因為(A or B) or (C or D)
如果A
為真,然后(A or B)
自動為真,然后整個表達式為真,並返回該行。
在A or B or C or D
類的情況下,如果A
為true,則返回該行;如果A
為false,但B
為true,則返回該行;如果A
和B
為false,但C
為true,則該行為返回等
希望能有所幫助。
編輯:
在某些情況下,查詢優化器可能不會選擇短路OR(因此,如果第二個謂詞可能引發異常,則有時可能會先執行它):(另請參見: SQL Server中的OR運算符短路 ),但對於在OP的情況下,關聯屬性仍然決定表達式的評估。
您可能希望基於成功的第一個比較來限制結果集。 但是,正如某些評論中已經說過的那樣,除非有預定義的順序,否則您無法確保首先評估哪個條件並返回該條件。
因此,我想您可以根據優先級定義和分配順序,然后使用ROWNUM = 1
獲取該順序中匹配的第一行。
SELECT *
FROM (
SELECT t.*
FROM Table1 t
ORDER BY CASE
WHEN subject_1 LIKE '%TEST1%'
THEN 1
WHEN subject_1 LIKE '%TEST2%'
THEN 2
WHEN subject_1 LIKE '%TEST3%'
THEN 3
END
,CASE
WHEN subject_2 LIKE '%TEST1%'
THEN 4
WHEN subject_2 LIKE '%TEST2%'
THEN 5
WHEN subject_2 LIKE '%TEST3%'
THEN 6
END
)
WHERE rownum = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.