"!="不是"="的反面吗?

Dan*_*bes 2 mysql sql

为什么如果我把=它给我带来了正确的结果,当我把它放在!=它给我带来了完整的列表而不是不同的列表.

SELECT     * 
FROM      library, crime_data 
WHERE     crime_data.id=$oreo 
AND       crime_data.isbn != library.isbn 
AND       crime_data.visibility='0' 
GROUP BY  library.isbn
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

asa*_*lla 8

您必须从概念上从集合论的角度思考SQL正在做什么.当您连接两个表时,概念是笛卡尔连接 - 表A的每一行与表B的每一行连接.因此,如果您有10行的表和20行的表并加入它们,您将得到一个连接200行.

现在,当您选择使用"="时,只选择值相等的行,通常很少.当您使用"!="时,它会选择所有其他行.


编辑以回答评论"应该如何".

Select *
From library
Where Not Exists 
    (
        Select 1 
        From  crime_data 
        Where crime_data.isbn = library.isbn 
    )
Run Code Online (Sandbox Code Playgroud)