MySQL内连接与不等于运算符

时间:2011-08-26 21:08:59

标签: php mysql join

Sale中有很多行,SalesProcessed中有一行。

SELECT * FROM Sale 
    INNER JOIN SalesProcessed
    ON Sale.id<>SalesProcessed.id
    LIMIT 0,30

此代码返回id在SalesProcessed中的同一行。为什么呢?

实际上我需要销售行,而SalesProcessed中不存在ID。

3 个答案:

答案 0 :(得分:10)

SELECT *
    FROM Sale
        LEFT JOIN SalesProcessed
            ON Sale.id = SalesProcessed.id
    WHERE SalesProcessed.id IS NULL
    LIMIT 0,30

答案 1 :(得分:4)

另一种方法

SELECT * FROM Sale 
where Sale.id not in (select SalesProcessed.id from SalesProcessed)
LIMIT 0,30



SELECT * FROM Sale 
where NOT EXISTS (
 select SalesProcessed.id from SalesProcessed where Sale.id=SalesProcessed.id)
LIMIT 0,30

您应该使用explain检查每个查询以获得最佳结果

答案 2 :(得分:4)

如果您想要不存在的行,那就是错误的查询:

SELECT *
FROM Sale
LEFT JOIN SalesProcessed
ON Sale.ID = SalesProcessed.id
WHERE SalesProcessed.id IS NULL;