0

私のSQL文はそのように見えます

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q
     , subjects AS sb
     , sections AS sc
     , chapters AS c
     , paragraphs AS p 
WHERE (sb.id=q.subject AND c.id=q.chapter AND sc.id=q.section AND p.id=q.paragraph) AND (q.author_id=1) 
ORDER BY  q.id asc 
LIMIT 0, 25

ご覧のとおり、これらのテーブルは ID によって相互に関連付けられています。問題は、テーブルの列ではなくテーブルのsubject列を取得していることです。ここで何が欠けていますか?questionssubjectsubjects

ノート

例として主題を提供しました。実際には、AS sc、章 AS c、段落 AS p の 3 つのセクションすべてが機能していません。私は主題だけを取得しています。

4

2 に答える 2

2

どうやらあなたの質問のクエリは問題ありませんが、それでもそれを掘り下げるには、代わりにこのステートメントを使用して、subject_subject列に何が表示されるかを確認してください。

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject as subjects_subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q
     , subjects AS sb
     , sections AS sc
     , chapters AS c
     , paragraphs AS p 
WHERE (sb.id=q.subject AND c.id=q.chapter AND sc.id=q.section AND p.id=q.paragraph) AND (q.author_id=1) 
ORDER BY  q.id asc 
LIMIT 0, 25

お役に立てれば。

于 2012-05-13T17:18:50.837 に答える
1

私は通常、明示的に JOIN 構文を使用します。これにより、問題を追跡するのに役立つ、より適切なエラー出力が得られる場合があります。

これがオリジナルで、違いが簡単にわかるようにフォーマットされています。

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q, 
     subjects AS sb, 
     sections AS sc, 
     chapters AS c, 
     paragraphs AS p 
WHERE (sb.id=q.subject 
       AND c.id=q.chapter 
       AND sc.id=q.section 
       AND p.id=q.paragraph) 
      AND (q.author_id=1) 
ORDER BY  q.id asc 
LIMIT 0, 25

そして、これが編集されたバージョンです。テーブルをフックする方法を定義する WHERE 句のパラメーターが、ON 句としてテーブル名リストに移動されていることに注意してください。これは INNER JOIN 構文の一部であり、INNER JOIN ON です。

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q
  INNER JOIN subjects AS sb ON sb.id = q.subject
  INNER JOIN sections AS sc ON sc.id = q.section 
  INNER JOIN chapters AS c ON c.id = q.chapter
  INNER JOIN paragraphs AS p ON p.id = q.paragraph
WHERE (q.author_id=1) 
ORDER BY  q.id asc 
LIMIT 0, 25

それを MySQL に対して直接実行しようとすると、どうなりますか?

于 2012-05-13T17:27:16.687 に答える