我有两张桌子:一。tableA是一个包含许多列的记录的列表。有一个名为“created”的时间戳列2。table用于跟踪我的应用程序中锁定table中记录以供审阅的用户。它由四列组成:id、用户id、记录id和另一个时间戳column。我试图从tableA中选择最多10条未被tableA中的任何人锁定的记录,以供审阅(我还在WHERE子句中过滤来自tableA的其他类似记录状态的列)。到目前为止,我想说的是:SELECT tableA.* FROM tableA LEFT OUTER JOIN tableB ON tableA.id = tableB.record_id WHERE tableB.id = NULL AND tableA.status = 'new' AND tableA.project != 'someproject' AND tableA.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59' ORDER BY tableA.created ASC LIMIT 0, 10;目前表a中有几千条记录,表B中没有记录。肯定有记录在时间戳之间,我用一个简单的SELECT * FROM tableA WHEREcreated BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'上面的第一个语句返回零行,第二个语句返回2000多行。 最佳答案 tableB.id = NULL应该是tableB.id IS NULL它从来不是真实的(也不是假的)。NULL=NULL的计算结果为未知,因此tableB.idNULL同样不会返回任何结果)。参见http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html和Why does NULL = NULL evaluate to false in SQL server关于sql - 为什么此SELECT…JOIN语句不返回结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2790543/ 10-13 21:45