我希望有人可以帮我弄清楚我正在尝试从Sequel Pro中运行的SQL查询错误。错误消息显示
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'.id附近使用正确的语法 INNER JOIN directory_person ON directory_twitter.id = directory_person.id WH'在第1行
我写的查询是
SELECT directory_twitter.id, directory_twitter.name, directory_twitter.screen_name,
directory_twitter.followers, directory_group.id, directory_group.title
FROM directory_twitter, directory_group
INNER JOIN directory_person_groups
ON directory_person_groups.person_id = directory_twitter.id,
directory_person_groups.group_id = directory_group.id
INNER JOIN directory_person
ON directory_twitter.id = directory_person.id
WHERE directory_person.appears_in_directory = "1"
我正在尝试让查询返回用户(directory_twitter.name)
的名称,他们的屏幕名称(directory_twitter.screen_name)
,他们的关注者总数(directory_twitter.followers)
以及他们的群组名称在(directory_group.title)
。不幸的是,我们设置表的方式,我认为将组加入用户的唯一方法是INNER JOIN-ing
第三个表(directory_person_groups)
,其中组ID和用户ID都存在。
最后,我希望此查询返回的唯一用户是我们目录(WHERE directory_person.appears_in_directory = "1")
中的用户。在表directory_person
,directory_person.id = directory_twitter.id
中。
我一直试图弄清楚我的错误是几个小时,但我没有取得任何进展。一切都正确,除了我不熟悉的语法错误?任何和帮助非常感谢。谢谢!
编辑:我正在查询的表格的所有列都在下面。
directory_twitter
:id
,person_id
(与id
的价值相同),screen_name
,name
,{{1} },followers
(我不确定此选择器在数据库中的其他位置使用,它与user_id
和id
的值不同。
person_id
:directory_group
(与id
不同),directory_twitter.id
(slug
的一个slu g),title
,{{1 (组的Twitter句柄,例如CNN for @cnn)
title
:screen_name
(我不知道在数据库中出现此值的任何地方,它与directory_person_groups
和id
)不同,{ {1}},directory_twitter.id
directory_group.id
:person_id
(与group_id
相同,与directory_person
)相同,id
(此值与{{1}不同}),directory_twitter.id
,directory_twitter.person_id
,title
答案 0 :(得分:1)
尝试此查询但您需要添加一些索引,否则需要很长时间才能运行。如果我是你的话,我建议你在运行之前将WHERE子句中的列作为索引。
SELECT DT.name, DT.screen_name, DT.followers, DG.title
FROM directory_twitter AS DT, directory_group AS DG, directory_person_groups AS DPG
WHERE DPG.person_id=DT.person_id AND DPG.group_id=DG.id AND DT.person_id IN
( SELECT DP.id
FROM directory_person AS DP
WHERE appears_in_directory='1'
) ;
答案 1 :(得分:0)
试试这个
SELECT DIRECTORY_TWITTER.ID,
DIRECTORY_TWITTER.NAME,
DIRECTORY_TWITTER.SCREEN_NAME,
DIRECTORY_TWITTER.FOLLOWERS,
DIRECTORY_GROUP.ID,
DIRECTORY_GROUP.TITLE
FROM DIRECTORY_TWITTER,
DIRECTORY_PERSON_GROUPS,
DIRECTORY_PERSON,
DIRECTORY_GROUP
INNER JOIN DIRECTORY_PERSON_GROUPS
ON DIRECTORY_PERSON_GROUPS.PERSON_ID = DIRECTORY_TWITTER.ID
AND DIRECTORY_PERSON_GROUPS.GROUP_ID = DIRECTORY_GROUP.ID
INNER JOIN DIRECTORY_PERSON
ON DIRECTORY_TWITTER.ID = DIRECTORY_PERSON.ID
WHERE DIRECTORY_PERSON.APPEARS_IN_DIRECTORY = "1"