7

私はこの記事を読んでおり、この SQL ステートメントを理解しようとしていますが、まだ SQL に慣れていません。

コメントと c が何を指しているのかわかりません。
そのうちの1つはテーブル名だと思いますが、もう1つはわかりません。また、明らかに、私が経験したことのないサブクエリがその中にあります。

  SELECT c.id, c.user_id, c.body, c.deep, c.lineage, c.parent_id,
         (SELECT COUNT(*) 
            FROM comment 
           WHERE comment.lineage LIKE (CONCAT(c.lineage,'%')) 
             AND comment.lineage != c.lineage) AS replies
    FROM comment as c
ORDER BY c.lineage
4

7 に答える 7

3
SELECT c.id,
       c.user_id,
       c.body, 
       c.deep, 
       c.lineage, 
       c.parent_id, (
       SELECT COUNT(*)
         FROM comment
        where comment.lineage LIKE (CONCAT(c.lineage,'%'))
          AND comment.lineage!=c.lineage)
       as replies
       FROM comment as c 
       order by c.linea

最初のリストは、選択するすべてのフィールドであり、そのプレフィックスはc後でcommentテーブルのエイリアスになります。

クエリ内のクエリはサブクエリであり、like を実行して(ワイルドカードである)と連結.clineageするクエリを実行します。%このサブクエリの結果は に保存されrepliesます。

結果の順序はlineaです。

于 2011-03-13T00:34:32.317 に答える
2

ccommentで定義されたという名前のテーブルのエイリアスですcomment as c

于 2011-03-13T00:34:28.807 に答える
2

comment実際、このクエリのテーブルの名前です。 cはそのテーブルに (構文で) 使用されるエイリアスであるcomment as cため、クエリの他の場所では、テーブル名全体ではなくcomment単に a を使用してテーブルを参照できます。c

サブクエリも同じテーブルからクエリを実行しているこの特定のケースでは、エイリアスにより、親クエリから同じテーブルを参照できます。サブクエリのコンテキストでは、c.lineage(親クエリから返された行ごとの) 静的な値であり、サブクエリで行をフィルター処理するために使用されるため ( を使用)、これはここで役立ちますcomment.lineage。サブクエリは、親クエリの行ごとに 1 つの値を返すことができ、その値はreplies結果の名前にエイリアスされます。

于 2011-03-13T00:35:16.863 に答える
1

「コメント」はテーブル名で、「c」は入力を節約するための単なるエイリアスです。このクエリは、コメント テーブルからコメントのリストを取得します。で指定された数の列とc.id, c.user_id, c.body, c.deep, c.lineage, c.parent_id、で指定されたこのコメントへの返信の数を返します。(SELECT COUNT(*) FROM comment where comment.lineage LIKE (CONCAT(c.lineage,'%')) AND comment.lineage!=c.lineage) as replies

于 2011-03-13T00:34:57.700 に答える
0

Comment はテーブルで、c は最後のコメント テーブル参照のエイリアスです。したがって、c.id は、コメント テーブルの最後のインスタンスの id 列を参照します。

于 2011-03-13T00:34:11.007 に答える
0

キーワードは何かのasエイリアスを作成し、後で明確に参照できるようにします。したがって、commentテーブルを参照し、c同じテーブルのエイリアスです。commentこれは、2 つの異なるコンテキスト (メイン クエリとサブクエリの両方) で参照しているため、特に便利です。

repliesサブクエリの結果に名前を割り当てることもできます。

(SELECT COUNT(*) 
   FROM comment 
  WHERE comment.lineage LIKE (CONCAT(c.lineage,'%')) 
    AND comment.lineage!=c.lineage) as replies
于 2011-03-13T00:35:13.100 に答える
0

あなたは自分の考えに非常に近かった。コメントはテーブル名で、c も同様です。コメントに c というラベルを付けている FROM comment as c' という行を参照してください。サブクエリは、それらの外側の () 内のすべてです

于 2011-03-13T00:35:39.527 に答える