我的查询中有错误吗?

时间:2012-12-04 13:24:02

标签: sql sqlite

我在iOS中的SQLite中进行查询,有时返回0行。它有什么错误吗?

SELECT mcon.MessageDictKey, 
       mcon.EMail, 
       con.Name, 
       con.ShowOnLists, 
       mcon.ContactType
  FROM MessageContacts AS mcon
  LEFT JOIN Contacts AS con ON mcon.EMail=con.EMail 
 WHERE mcon.MessageDictKey='5-131' 
   AND mcon.ContactType=0

1 个答案:

答案 0 :(得分:1)

我相信你的查询是相反的。我相信你想从Contacts和LEFT JOIN到MessageContacts中选择什么。您总是希望联系回来,即使他们没有任何消息。你的查询是说“我总是想要消息,即使他们没有联系人”这是倒退的。

SELECT mcon.MessageDictKey, 
       mcon.EMail, 
       con.Name, 
       con.ShowOnLists, 
       mcon.ContactType
  FROM Contacts AS con
  LEFT JOIN MessageContacts AS mcon ON mcon.EMail=con.EMail  AND mcon.MessageDictKey='5-131' AND mcon.ContactType=0

我还将WHERE子句移动到ON语句。将它放在WHERE中基本上会导致LEFT JOIN充当INNER JOIN(因为不匹配的记录将被强制传递WHERE子句的值)。

如果这不是您想要的,请告诉我,我将删除我的答案。我无法在评论中准确地传达所有这些,所以我将其作为答案提交。