2011-08-05 98 views
1

我有查询在MySQL查询选择唯一行

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

使用GROUP BY statment

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

雇主的ID使用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

感谢我一直在寻找它 – Johnds

0

首先,任何时候你引用一个LEFT加入WHERE子句中的列,如statuses.number =2,您将否定LEFT并强制其表现得​​像INNER。

其次,试试这个版本:

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)