内部联接仅返回7条记录

时间:2010-11-03 20:34:44

标签: sql mysql select join

我有一张包含500.000条记录的表格,其中包含Twitter更新。然后我有一张包含用户信息的表格。

我基本上需要用户表中所有人的Twitter记录。

我可以用这个SELECT IN查询来做到这一点:

SELECT *
FROM STATUS WHERE twitterUserID
IN (    
    SELECT twitteruserid
    FROM accountLink
)

但这显然很慢。

然后我尝试使用连接,但它只显示7条记录。不知道为什么。

SELECT status . * , accountLink.userId, accountLink.twitterUserId
FROM status
JOIN accountLink
ON status.twitterUserId = accountLink.twitterUserId

有谁知道会导致这种行为的原因以及如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

尝试将其更改为:

SELECT status.* , accountLink.userId, accountLink.twitterUserId
FROM status
LEFT JOIN accountLink
ON status.twitterUserId = accountLink.twitterUserId

我怀疑状态和帐户链接之间的所有记录都没有匹配项。无论status是否匹配,执行左连接都会选择每accountLink个。

答案 1 :(得分:0)

除非列数据类型不同,否则JOIN语法应该有效。

根据MySQL Documentation for IN()

  

然后使用二分搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。否则,类型转换将根据第11.2节“表达式评估中的类型转换”中所述的规则进行,但适用于所有参数。

确保列类型匹配应确保JOIN语法正常工作。

答案 2 :(得分:0)

SELECT s.*, a.twitterUserId, a.userId
FROM status AS s INNER JOIN accountLink AS a
WHERE s.twitterUserId=a.twitterUserId

您想要使用内部联接,因为您只想返回结果,如果“状态”表有记录并且在“accountLink”表中找到相应的用户记录。如果“状态”表记录没有相应的用户条目,则不应显示它(至少根据您的帖子)。即使accountLink表中没有匹配的条目,LEFT OUTER JOIN也会显示状态表记录。

这是学习SQL连接的绝佳资源:
SQL Joins (w3schools.com)