2011-03-13 20 views
7

Estoy leyendo this article y estoy tratando de entender esta declaración SQL, pero todavía soy un poco nuevo en SQL.¿Puede alguien explicarme esta consulta SQL?

No estoy seguro de a qué comentario yc se refieren.
Creo que uno de ellos es el nombre de la tabla pero no estoy seguro del otro. También, al parecer hay una subconsulta dentro de ella que no he tenido ninguna experiencia con:

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 
+0

Puede que también le interese esta pregunta [Cuándo usar SQL Table Alias] (http://stackoverflow.com/questions/198196/when-to-use-sql-table -alias) – R0MANARMY

Respuesta

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 

La primera lista se muestran todos los campos para ser seleccionado, con el prefijo de c que es el alias más tarde a la mesa comment.

La consulta en una consulta es una subconsulta, que ejecuta esa consulta que hace un me gusta y concatena .clineage con % (que es el comodín). Este resultado de la subconsulta se guarda en replies.

Los resultados están ordenados por linea.

+1

Al verlo formateado así, permítanme entenderlo de inmediato. Gracias. –

0

comentario a una mesa y c es un alias para la tabla de referencia último comentario. Entonces, c.id se refiere a la columna id en la última instancia de la tabla de comentarios.

2

c es un alias de una tabla denominada comment definida con comment as c.

1

"comment" es el nombre de la tabla, y "c" es solo un alias para guardar la escritura. La consulta obtiene una lista de comentarios de la tabla de comentarios. Devuelve una serie de columnas que especifica c.id, c.user_id, c.body, c.deep, c.lineage, c.parent_id, así como el número de respuestas a este comentario, según lo especificado por (SELECT COUNT(*) FROM comment where comment.lineage LIKE (CONCAT(c.lineage,'%')) AND comment.lineage!=c.lineage) as replies

0

La palabra clave as crea un alias para algo, para que pueda referirse a ella más tarde sin ambigüedades. Entonces, comment se refiere a la tabla y c es un alias para esa misma tabla. Esto es especialmente útil ya que se refiere al comment en dos contextos diferentes (tanto en la consulta principal como en la subconsulta).

También le permite asignar el nombre replies al resultado de la subconsulta:

(SELECT COUNT(*) 
    FROM comment 
    WHERE comment.lineage LIKE (CONCAT(c.lineage,'%')) 
    AND comment.lineage!=c.lineage) as replies 
2

comment es de hecho el nombre de una tabla en esta consulta. c es un alias utilizado para esa tabla (en la sintaxis comment as c) para que en cualquier otra parte de la consulta se pueda hacer referencia a la tabla comment con simplemente un c en lugar del nombre completo de la tabla.

En este caso particular, donde la subconsulta también consulta desde la misma tabla, el alias le permite hacer referencia a la misma tabla desde la consulta principal. Esto es útil aquí porque, en el contexto de la subconsulta, c.lineage es un valor estático (por fila devuelta desde la consulta principal) que se utiliza para filtrar filas en la subconsulta (con comment.lineage). La subconsulta puede devolver un único valor por fila de la consulta primaria, y ese valor se alias al nombre replies en el resultado.

0

Estuviste muy cerca de lo que pensabas. el comentario es el nombre de la tabla, y también lo es c. Vea la línea que dice DESDE el comentario como c 'que está etiquetando el comentario como c.La subconsulta es todo dentro de los elementos externos()

Cuestiones relacionadas