2012-12-14 82 views
1

有没有什么办法来优化这个sql语句? 也许加入或什么?在多个NOT IN优化MySQL查询

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

感谢

回答

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 
0

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

SELECT id, name FROM item 
WHERE id NOT IN (
    SELECT id FROM itemlock UNION SELECT id FROM itemlog 
) 
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; 
+0

我试图运行这个,但不幸的是,这比我的原始脚本慢。工会可能会让事情变得更慢。 :-( – Jronny