2009-11-24 65 views
3

我有一个从表中检索结果的sql查询,但如果id不在另一个表中,我需要它才显示结果。如何从不存在id的子查询中获取

$sql = "SELECT id FROM TABLE_1 WHERE id NOT IN(SELECT more_id FROM TABLE_2)

的想法是,如果ID没有在“more_id”列表中存在,那么它应该显示的结果。

它似乎没有工作,任何帮助将不胜感激。 我应该提到“more_id”只是一个“id”,但在另一个存储其他记录的表中。

+0

什么问题?乍一看,你的查询看起来确定你正在描述的内容... – 2009-11-24 02:42:22

回答

4

这应该工作:

$sql = "SELECT TABLE_1.id 
      FROM TABLE_1 
      LEFT JOIN TABLE_2 
       ON TABLE_1.id = TABLE_2.more_id 
      WHERE TABLE_2.more_id IS NULL" 

没有WHERE子句,你最终会在TABLE_1的所有项目,包括在TABLE_2和火柴那些没有的人的名单。添加WHERE子句过滤匹配。

+0

纠正我,如果我错了,是不是这样'SELECT ID FROM TABLE_1 WHERE ID IS NULL'。对我来说没有意义。 – 2009-11-24 02:45:15

+0

这应该与OP的查询产生相同的结果集,但是,不是吗? (取决于RDBMS如何使用索引,但是,一个*可能会比另一个更快,但这不是原来的问题。) – 2009-11-24 02:46:43

+0

不,它不一样。添加了说明来解释原因。 – Ali 2009-11-24 02:46:53

0

我最好打赌的是一张桌子使用VARCHAR作为ID,另一张桌子使用INTEGERCHAR或其他无法比拟的类型。