2012-01-05 8 views
6

Ho tre tabelle: node, content_type_product e share_content. Lì potrebbe essere una relazione 1: N tra nodo e share_content. Voglio estrarre solo un record per ID. Se non v'è più record in share_content, voglio quello più recente, che è il valore più alto di sc.auto_idsql left join + one to many relationship

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

È possibile utilizzare ORDER BY DESC sc.auto_id – amccausl

+1

Il [es] (http://sscce.org/) è incompleta senza schema (come 'CREATE table'), campione dati (come istruzioni 'INSERT') e risultati desiderati per i dati di esempio. – outis

+0

possibile duplicato di [Seleziona righe con gruppo Valore colonna massimo per un'altra colonna] (http://stackoverflow.com/questions/1425240/), [Come trovare il valore della colonna stringa superiore in una query raggruppata] (http: // stackoverflow.com/questions/1443979/), [SQL Group by & Max] (http://stackoverflow.com/questions/1299556/) – outis

risposta

5

Perché unendo a content_type_product ?? Ma a parte questo, provare

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

Modificato perché la subquery non restituirebbe le colonne necessarie per effettuare il join, restituirebbe solo il valore MAX (auto_id). –

+0

hmm, come può c.auto_id = uid, messaggio ?? – sonofthom

+0

riarmato per restituirlo a ciò che è stato inviato - perché quella è l'unica colonna che la query secondaria deve restituire, codice aggiunto per il campo messaggio –

1

Prova:

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

Grazie - funziona, tuttavia - stiamo cercando di raggruppare solo da sc.nid - poiché vogliamo un solo risultato. – sonofthom