我有一张包含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
有谁知道会导致这种行为的原因以及如何解决这个问题?
答案 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)