Выберите уникальные строки в запросе MySQL - PullRequest
1 голос
/ 06 августа 2011

У меня есть запрос

SELECT DISTINCT employer.id, employer.name
FROM employers 
LEFT JOIN positions ON positions.id = employers.id 
LEFT JOIN statuses ON statuses.position = positions.some 
WHERE statuses.number = 2

И дело в том, что мне нужны уникальные записи от работодателей, но я получаю дубликаты, потому что statuses.number повторяется как 222 6 777 и т. Д. Мне нужно захватить их только один раз.Я не хочу использовать DISTINCT, есть ли другой способ?

Ответы [ 3 ]

3 голосов
/ 06 августа 2011

использовать статистику GROUP BY

   SELECT employer.id, employer.name
    FROM employers 
     LEFT JOIN positions ON positions.id = employers.id 
     LEFT JOIN statuses ON statuses.position = positions.some 
    WHERE statuses.number = 2 GROUP BY employer.id
0 голосов
/ 06 августа 2011

Во-первых, каждый раз, когда вы ссылаетесь на столбец LEFT JOINed в предложении WHERE, например statuses.number =2, вы отрицаете LEFT и заставляете его вести себя как ВНУТРЕННИЙ.

Во-вторых, попробуйте эту версию:

SELECT e.id, e.name
    FROM employers e
    WHERE EXISTS(SELECT 1
                     FROM positions p
                         INNER JOIN statuses s
                             ON p.some = s.position
                     WHERE p.id = e.id
                         AND s.number = 2)
0 голосов
/ 06 августа 2011

Используя GROUP BY для идентификатора работодателя, вы получите только одну запись работодателя для каждой возвращенной строки:

SELECT employer.id, employer.name
FROM employers 
LEFT JOIN positions ON positions.id = employers.id 
LEFT JOIN statuses ON statuses.position = positions.some 
WHERE statuses.number = 2
GROUP BY employer.id
...