为什么column_name =(select column_name)工作而不是column_name = null

时间:2013-07-31 12:35:15

标签: mysql

我正在为我的模型获取一些行,但是视图有很多标准我厌倦了编写许多模型。为了使工作更容易,我不想为所选的每个条件编写新的select语句,所以最初我试过即使用户未提供一个或多个可用标准,尝试仍然从选择中返回一些内容。

SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null;

并且不返回任何内容

最后我试过

SELECT * FROM members WHERE member_id = (select member_id) AND member_club_id = (select member_club_id=1) AND membership_year = (select membership_year);

这是正常的。

我还是mysql的新手,我想知道为什么第二种方法有效。

例如,感兴趣的是select member_club_id=1member_id = (select member_id)

member_id = (select member_id)中,我认为这将被视为member_id=member_id,因为我没有名为member id的变量,因此失败。

select member_club_id=1中,我认为unknown column会出现member_club_id错误,因此会失败。

有人帮忙。

2 个答案:

答案 0 :(得分:2)

您无法将=NULL一起使用。使用IS NULLIS NOT NULL

请参阅:http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

答案 1 :(得分:1)

在第一个查询中你可能想要这样做

 SELECT * FROM members WHERE member_id is null 
                         AND member_club_id = 1 
                         AND membership_year is null;
  • mysql = null中没有is null

在你的第二个查询中我不认为member_id = (select member_id)会做某事

就像你说WHERE member_id = member_id这在所有情况下都会自动返回true。这就是为什么你让它工作。