2011-11-06 6 views
1

J'ai une table Mark avec id et name champs et deuxième table avec mark_id et deux colonnes supplémentaires que je suis intéressé. Je veux tous les enregistrements de la table Mark + priorité pour que marque et created_at. Il peut y avoir plusieurs valeurs de created_at mais je m'en fous, j'ai juste besoin d'un (d'abord, peu importe).SQL JOIN pour obtenir la colonne distincte de deuxième table

J'ai essayé cette requête qui me donne trop d'enregistrements, 5 au lieu de 3 je m'attends.

SELECT 
    marks.*, 
    markings.created_at, 
    markings.created_at AS updated_at, 
    markings.priority 
FROM `marks` 
JOIN markings 
    ON marks.id = markings.tag_id 
WHERE (created_at > '2011-11-06 12:05:01') 
    AND (priority = 1) 
ORDER BY created_at; 

Répondre

3
SELECT 
    marks.*, 
    MIN(markings.created_at) as created_at, 
    MIN(markings.created_at) AS updated_at, 
    markings.priority 
FROM `marks` 
JOIN markings 
    ON marks.id = markings.tag_id 
WHERE (created_at > '2011-11-06 12:05:01') 
    AND (priority = 1) 
GROUP BY marks.col1, marks.col2, ... marks.coln, markings.priority 
ORDER BY created_at; 

marks.col1, marks.col2, ... marks.coln serait marks.id, marks.name dans votre cas si vous ne disposez pas plus de colonnes que vous ne nous dites pas.

1

Ce groupe de recherche le résultat par des marques et id, devrait être ce que vous voulez:

SELECT 
    marks.id, 
    MAX(markings.created_at), 
    MAX(markings.created_at) AS updated_at, 
    markings.priority 
FROM `marks` 
JOIN markings 
    ON marks.id = markings.tag_id 
WHERE (created_at > '2011-11-06 12:05:01') 
    AND (priority = 1) 
GROUP BY marks.id,markings.priority 
ORDER BY updated_at; 
+0

Colonne « marks.name » est invalide dans la liste de sélection, car il ne figure pas dans une fonction d'agrégation ou Clause GROUP BY. –

+0

La colonne "marks.created_at" n'est pas valide dans la clause ORDER BY, car elle n'est contenue ni dans une fonction d'agrégation, ni dans la clause GROUP BY. –

Questions connexes