2012-01-05 24 views
6

Tengo tres tablas: node, content_type_product y share_content. Hay puede ser una relación 1: N entre nodo y share_content. Quiero sacar solo un registro por identificación. Si hay varios registros en share_content, quiero que el último de ellos, que es el valor más alto de sc.auto_idsql left join + relación uno a muchos

SELECT sc.uid, n.uid, n.nid, sc.message 
    FROM node n 
    LEFT JOIN content_type_product p ON n.nid = p.nid 
    LEFT JOIN share_content sc ON n.nid = sc.nid 
    WHERE n.nid = 40513 
    GROUP BY sc.nid 
    ORDER BY sc.auto_id 
+0

Puede utilizar ORDER BY DESC sc.auto_id – amccausl

+1

El [ejemplo] (http://sscce.org/) es incompleta sin esquema (como 'CREATE TABLE'), la muestra datos (como declaraciones "INSERT") y resultados deseados para los datos de muestra. – outis

+0

posible duplicado de [Seleccionar filas con el grupo Valor máximo de columna por otra columna] (http://stackoverflow.com/questions/1425240/), [Cómo encontrar el valor de columna principal de una consulta agrupada] (http: // stackoverflow.com/questions/1443979/), [SQL Group by & Max] (http://stackoverflow.com/questions/1299556/) – outis

Respuesta

5

¿Por qué se unirá a content_type_product ?? Pero aparte de eso, tratar

SELECT c.uid, n.uid, n.nid, c.message 
FROM node n 
    LEFT JOIN share_content c 
     ON c.nid = n.nid 
      And c.auto_id 
      = (Select Max(auto_id) 
       From share_content 
       Where nid = p.nid) 
Where n.nid = 40513 
ORDER BY c.auto_id 
+0

Lo editó porque su subconsulta no devolvería las columnas necesarias para realizar la unión, solo devolvería el valor MAX (auto_id). –

+0

hmm, ¿cómo puede c.auto_id = uid, mensaje ?? – sonofthom

+0

reeditado para devolverlo a lo que se envió, porque esa es la única columna que la subconsulta NECESITA devolver, código agregado para el campo de mensaje –

1

Probar:

SELECT sc.uid, n.uid, n.nid, sc.message FROM node n left join content_type_product p on n.nid = p.nid LEFT JOIN share_content sc on n.nid = sc.nid 
WHERE n.nid = 40513 
GROUP BY sc.nid, sc.auto_id 
ORDER BY sc.auto_id DESC 
+0

Gracias, funciona, sin embargo, estamos buscando agrupar solo por sc.nid, ya que solo queremos un resultado. – sonofthom

Cuestiones relacionadas