2016-09-30 102 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)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –