我有以下查询,其中列出了所有具有匹配的facebook帐户的帐户 - 问题是,有时facebook表中有多行与匹配匹配,然后我们会重复返回重复行,即使是ac .id AS id应该是唯一的主键。
SELECT ac.id AS id
, ac.first_name
, ac.last_name
, ac.email
, ac.company_name
, upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts
ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` = ''
AND ac.last_name != ''
AND ac.`owner_id` = '121'
ORDER BY ac.`last_name` ASC
两个问题是返回重复的行(我认为当facebook表中有多行与upd8r_user_accts.id匹配时。并且查询需要10秒才能运行...我有一个关于upd8r_user_accts.id的索引认为这可能有所帮助,但它没有
答案 0 :(得分:0)
小费:
为ON
或WHERE
按SELECT
SELECT STRAIGHT JOIN
答案 1 :(得分:0)
由于upd8r_user_accts.id是主键 - 在此列上添加索引无关紧要,因此是多余的。 您的查询结果表明一些用户有多个Facebook帐户。 您没有说明id列的数据类型,但您可以尝试这样的事情..
SELECT ac.id AS id, ac.first_name, ac.last_name, ac.email, ac.company_name, upd8r_facebook_accts.id AS fb
FROM upd8r_user_accts ac
LEFT OUTER JOIN upd8r_facebook_accts ON ac.id = upd8r_facebook_accts.user_id
WHERE ac.`rfid` = ''
AND ac.last_name != ''
AND ac.`owner_id` = '121'
AND upd8r_facebook_accts.id = (SELECT MAX(ufa.id) FROM upd8r_facebook_accts ufa WHERE ufa.user_id = ac.id)
ORDER BY ac.`last_name` ASC
这会产生每个用户只显示一行的效果,但请记住,它删除的行可能不是您想要从结果中删除的行。 它还假设您可以在Id列上执行MAX功能。