0

我希望有人可以帮助我找出我试图从 Sequel Pro 中运行的 SQL 查询做错了什么。错误消息说

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.id INNER JOIN directory_person ON directory_twitter.id = directory_person.id WH”附近使用正确的语法

我写的查询是

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_twitter... id_ person_id_ id_ screen_name_ name_ followers_ user_id_ id_ person_id_

directory_group: id(不同于directory_twitter.id), slug( 的一个 slug title), title, screen_name(该组的 Twitter 句柄,例如 CNN for @cnn)

directory_person_groups: id(我不确定如果这个值出现在数据库中的任何其他地方,它与directory_twitter.id和都不同directory_group.id), person_id,group_id

directory_person: id(与directory_twitter.idwhich 相同directory_twitter.person_id), title(此值与 不同directory_group.title), first_name, last_name,appears_in_directory

4

2 回答 2

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'
                                    ) ;
于 2014-07-08T07:01:40.297 回答
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
于 2014-07-08T06:05:54.810 回答