SQL查询多个表抛出语法错误?

时间:2014-07-08 06:02:25

标签: mysql sql sequelpro

我希望有人可以帮我弄清楚我正在尝试从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_persondirectory_person.id = directory_twitter.id中。

我一直试图弄清楚我的错误是几个小时,但我没有取得任何进展。一切都正确,除了我不熟悉的语法错误?任何和帮助非常感谢。谢谢!

编辑:我正在查询的表格的所有列都在下面。

directory_twitteridperson_id(与id的价值相同),screen_namename,{{1} },followers(我不确定此选择器在数据库中的其他位置使用,它与user_idid的值不同。

person_iddirectory_group(与id不同),directory_twitter.idslug的一个slu g),title,{{1 (组的Twitter句柄,例如CNN for @cnn)

titlescreen_name(我不知道在数据库中出现此值的任何地方,它与directory_person_groupsid)不同,{ {1}},directory_twitter.id

directory_group.idperson_id(与group_id相同,与directory_person)相同,id(此值与{{1}不同}),directory_twitter.iddirectory_twitter.person_idtitle

2 个答案:

答案 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" 
  • 我将逗号更改为AND