-2

我在 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
4

1 回答 1

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 子句)。

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

于 2012-12-04T13:31:49.330 回答