2012-03-20 16 views
1

我想從這個not in查詢轉換爲not exists轉換不是不存在

select id, name, cat from posts where id not in (1, 100) 

我怎麼變成一個不存在

+0

只是好奇......你爲什麼需要這樣做?看來你目前的查詢沒問題。 – everton 2012-03-20 20:59:22

+0

當我使用NOT IN我的查詢需要9分鐘。當我刪除NOT IN需要13秒。只是想看看不存在會有所作爲 – Luke101 2012-03-20 21:07:28

+3

另外:確保'id'被索引。 – IAbstract 2012-03-20 21:09:00

回答

3
SELECT id, 
     NAME, 
     cat 
FROM posts p 
WHERE NOT EXISTS (SELECT 1 
        FROM (SELECT 1 AS col 
          FROM dual 
          UNION 
          SELECT 100 AS col 
          FROM dual) a 
        WHERE p.id = a.col); 

您當前的查詢是好的,但仍然如果您想使用NOT EXISTS,請嘗試此操作。

+0

這是怎麼回事?你忽略了'100',你沒有別名'col'所以這不起作用 – Ben 2012-03-20 21:04:56

+3

這是Oracle的存在主義嗎? ;) – 2012-03-20 21:06:13

+0

現在它工作Mr.Ben :) – Teja 2012-03-20 21:11:44

3

你並不需要這種轉換。如果您使用的是子查詢,而不是硬編碼的值列表,則not exists將是合適的。

您當前的查詢很好。

相關問題