SQL JOIN para obtener una columna distinta de la segunda tabla

Tengo una mesa Mark con id y name campos y segunda tabla con mark_id y dos columnas adicionales que me interesan. Quiero obtener todos los registros de Mark tabla + prioridad para esa marca y created_at. Puede haber varios created_at valores, pero no me importan mucho, solo necesito uno (primero, lo que sea).

Probé esta consulta que me da demasiados registros, 5 en lugar de 3, espero.

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;

preguntado el 06 de noviembre de 11 a las 15:11

2 Respuestas

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;

dónde marks.col1, marks.col2, ... marks.coln sería marks.id, marks.name en su caso, si no tiene más columnas, no nos informa.

respondido 06 nov., 11:19

Esta consulta agrupa el resultado por marcas e id, debe ser lo que desea:

   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;

respondido 06 nov., 11:21

La columna 'marks.name' no es válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY. - Albin Sunnanbo

La columna "marks.created_at" no es válida en la cláusula ORDER BY porque no está incluida en una función agregada ni en la cláusula GROUP BY. - Albin Sunnanbo

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