簡體   English   中英

SQL查詢:如果滿足搜索條件,應返回單條記錄,否則返回多條記錄

[英]SQL Query : should return Single Record if Search Condition met, otherwise return Multiple Records

我有數十億條記錄的表,表結構如下:

ID NUMBER PRIMARY KEY,
MY_SEARCH_COLUMN NUMBER,

MY_SEARCH_COLUMN數值最大為15位數字。

我想要的是,如果有任何特定的記錄匹配,我將只需要獲取該匹配的值,

即:如果我輸入WHERE MY_SEARCH_COLUMN = 123454321並且表的值為123454321則只應返回此值。

但是,如果精確值不匹配,我將不得不從表中獲取下一個10個值。

即:如果我輸入WHERE MY_SEARCH_COLUMN = 123454321並且列沒有值123454321則它應該從表中返回大於123454321 10個值

兩種情況都應在單個SQL Query中討論 ,我必須牢記查詢的性能 我已經在MY_SEARCH_COLUMN列上創建了索引,因此歡迎其他建議來提高性能。

如果不使用proc或某些動態SQL,這可能很棘手,但是我們可以在此處嘗試使用ROW_NUMBER

WITH cte AS (
    SELECT ID, MY_SEARCH_COLUMN,
        ROW_NUMBER() OVER (ORDER BY MY_SEARCH_COLUMN) rn
    FROM yourTable
    WHERE MY_SEARCH_COLUMN >= 123454321
)

SELECT *
FROM cte
WHERE rn <= CASE WHEN EXISTS (SELECT 1 FROM yourTable WHERE MY_SEARCH_COLUMN = 123454321)
                THEN 1
                ELSE 10 END;

上面查詢的基本思想是,我們為與目標匹配或更高匹配的所有記錄分配一個行號。 然后,如果完全匹配,則使用行號1進行查詢,如果不匹配,則使用最多10的所有行號進行查詢。

SELECT * FROM your_table AS src WHERE src.MY_SEARCH_COLUMN =存在時的情況(從your_table AS src2 WITH 1(無鎖)src2.MY_SEARCH_COLUMN = 123456321中選擇1)然后123456321 ELSE src.MY_SEARCH_COLUMN結束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM