SQL JOIN, чтобы получить отдельный столбец из второй таблицы - PullRequest
1 голос
/ 06 ноября 2011

У меня есть таблица Mark с полями id и name и вторая таблица с mark_id и двумя дополнительными столбцами, которые меня интересуют. Я хочу получить все записи из Mark table + priority дляэтот знак и created_at.Может быть несколько created_at значений, но меня это не волнует, мне просто нужно одно (первое, что угодно).

Я пробовал этот запрос, который дает мне слишком много записей, 5 вместо 3 Яожидать.

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;

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011
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 будет marks.id, marks.name в вашем случае, если у вас нет больше столбцов, о которых вы нам не говорите.

1 голос
/ 06 ноября 2011

Этот запрос группирует результат по отметкам и идентификатору, должен быть таким, какой вы хотите:

   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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...