SQL Join solo devuelve 1 fila

No estoy muy seguro de qué me estoy perdiendo, pero mi declaración SQL solo devuelve una fila.

  SELECT 
    tl.*, 
    (tl.topic_total_rating/tl.topic_rates) as topic_rating, 
    COUNT(pl.post_id) - 1 as reply_count, 
    MIN(pl.post_time) AS topic_time, 
    MAX(pl.post_time) AS topic_bump 
  FROM topic_list tl 
    JOIN post_list pl 
      ON tl.topic_id=pl.post_parent 
    WHERE 
      tl.topic_board_link = %i 
      AND topic_hidden != 1 
    ORDER BY %s

Tengo dos tablas (post_list y topic_list), y los enlaces post_parent de post_list al topic_id de una lista de temas.

En lugar de devolver todos los temas (donde el topic_board_link de su tablero es n), solo devuelve un tema.

preguntado el 08 de enero de 11 a las 23:01

publique partes relevantes de CREATE TABLE, incluidas las definiciones PK / FK. -

El PK de post_list es post_id, el PK de topic_list es topic_id. No (creo) tengo FK. -

1 Respuestas

Normalmente necesitaría una cláusula GROUP BY allí. MySQL tiene reglas diferentes de SQL estándar sobre el tema de cuándo se necesita GROUP BY. Por lo tanto, esto está más cerca de SQL estándar:

SELECT tl.*, 
       (tl.topic_total_rating/tl.topic_rates) AS topic_rating, 
       COUNT(pl.post_id) - 1 AS reply_count, 
       MIN(pl.post_time) AS topic_time, 
       MAX(pl.post_time) AS topic_bump 
  FROM topic_list AS tl 
  JOIN post_list  AS pl ON tl.topic_id = pl.post_parent 
 WHERE tl.topic_board_link = ?   -- %i
   AND tl.topic_hidden != 1 
 GROUP BY tl.col1, ..., topic_rating
 ORDER BY ?   -- %s

En SQL estándar, tendría que enumerar todas las columnas en topic_list, más el valor no agregado topic_rating (y es posible que deba enumerar la expresión en lugar de la etiqueta de visualización o el alias de columna en la lista de selección).

También tiene una condición de restricción en 'topic_board_link' que podría estar limitando su conjunto de resultados a un grupo. Normalmente tampoco puede utilizar un marcador de posición en la cláusula ORDER BY.

Respondido el 09 de enero de 11 a las 03:01

Gracias, el GROUP BY salvó el día. Probablemente debería volver a leer un libro sobre SQL;) - user499054

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.