2016-09-30 128 views
0

假設我有一個大表TBL_LARGE_TABLE,比如說有100列(column1,column2,... column100全爲空),我的客戶端給了我一個查詢,所以我可以過濾掉某些行:WHERE用於根據多個條件篩選出數據

SELECT * FROM TBL_LARGE_TABLE 
WHERE 
COLUMN2='00123' 
AND 
(COLUMN3 LIKE '%garbage%' OR COLUMN3 LIKE '%trash%') 
AND 
COLUMN100='0'; 

現在,我想把從TBL_LARGE_TABLE數據到另一個表TBL_ANOTHER_LARGE_ONE。將TBL_LARGE_TABLE插入到TBL_ANOTHER_LARGE_ONE中排除將通過上述SELECT語句的所有行的最佳方法是什麼?我不想刪除任何數據,我想讓原始表保持原樣。我只想選擇與上面的SELECT語句完全相反的東西。

+0

多少數量的行是否有該表SELECT COUNT(*)FROM TBL_LARGE_TABLE; ? – Karthik

回答

0
INSERT INTO TBL_ANOTHER_LARGE_ONE 
SELECT * 
FROM TBL_LARGE_TABLE 
WHERE NOT 
(
    COLUMN2='00123' 
    AND 
    (COLUMN3 LIKE '%garbage%' OR COLUMN3 LIKE '%trash%') 
    AND 
    COLUMN100='0 
) 
+0

我試着用NOT,但是有2mil左右的記錄,當我加上WHERE(上面的條件)+ WHERE NOT(上面的條件)時,我得到了1.9mil的計數。我可能因爲空丟失了一些記錄 – oldManInTheSea

+0

'WHERE NOT ( Nvl(COLUMN2,'x')='00123' AND (Nvl(COLUMN3,'x')LIKE'%garbage%'OR Nvl COLUMN3,'x')LIKE'%trash%') AND Nvl(COLUMN100,'x')='0 )' 這有效。謝謝。 – oldManInTheSea

+0

如果你在問題中沒有提及它,誰能知道哪些列允許空值? –

0
INSERT INTO TBL_ANOTHER_LARGE_ONE 

SELECT * 
FROM TBL_LARGE_TABLE 
WHERE 

    COLUMN2 <>'00123' 
    AND 
    (COLUMN3 NOT LIKE '%garbage%' OR COLUMN3 NOT LIKE '%trash%') 
    AND 
    COLUMN100 <>'0' 
) 
+0

儘管此代碼片段可能會解決此問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –