在多个NOT IN上优化MySQL查询

时间:2012-12-14 03:23:39

标签: mysql sql

有没有办法优化这个sql语句? 也许加入什么?

SELECT id, name
FROM item
WHERE id NOT IN (
    SELECT id 
FROM itemlock
) AND id NOT IN (
SELECT id
    FROM itemlog
)

由于

3 个答案:

答案 0 :(得分:3)

使用LEFT JOIN

SELECT  a.*
FROM    item a
        LEFT JOIN itemLock b
            ON a.ID = b.ID
        LEFT JOIN itemLog c
            ON a.ID = c.ID
WHERE   b.ID IS NULL AND 
        c.ID IS NULL

答案 1 :(得分:0)

您也可以使用UNION,如下所示:

SELECT id, name FROM item 
WHERE id NOT IN (
   SELECT id  FROM itemlock UNION SELECT id FROM itemlog
)

答案 2 :(得分:0)

试试这个:

SELECT id, NAME FROM item i 
LEFT JOIN (SELECT id FROM itemlock 
    UNION 
    SELECT id FROM itemlog) AS A ON i.id = A.id 
WHERE A.id IS NULL;