0

Sequel Pro 内から実行しようとしている SQL クエリで何が間違っているかを誰かが理解するのを手伝ってくれることを望んでいました。エラーメッセージは言う

SQL 構文にエラーがあります。1 行目の '.id INNER JOIN directory_person ON directory_twitter.id = directory_person.id WH' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

そして、私が書いたクエリは

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)。残念ながら、テーブルの設定方法では、グループをユーザーに参加させる唯一の方法は、グループ ID とユーザー ID の両方が存在INNER JOIN-ingする 3 番目のテーブルを使用することです。(directory_person_groups)

最後に、このクエリで返してもらいたい唯一のユーザーは、私たちのディレクトリにいるユーザーです(WHERE directory_person.appears_in_directory = "1")。表directory_personでは、directory_person.id = directory_twitter.id.

私は自分のエラーが何であるかを何時間も理解しようとしてきましたが、進歩はありませんでした. 私がよく知らない構文エラーを除いて、すべて正しいですか? どんな助けでも大歓迎です。ありがとうございました!

編集:クエリを実行しているテーブルのすべての列は以下のとおりです。

directory_twitter: id, person_id(これは と同じ値ですid), , , screen_name(nameこのセレクターがデータベースのどこで使用されているかはわかりません。および とは異なる値です)。followersuser_ididperson_id

directory_group: id( とは異なるdirectory_twitter.id), slug( のスラッグtitle), title, screen_name(グループの Twitter ハンドル、たとえば @cnn の CNN)

directory_person_groups: id(データベースのどこかにこの値が表示されているかどうかはわかりません。 と の両方directory_twitter.idとは異なりますdirectory_group.id), person_id,group_id

directory_person: id( と同じ とdirectory_twitter.id同じ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 に答える