在mysql查询中选择唯一的行

在mysql查询中选择唯一的行,mysql,unique,distinct,Mysql,Unique,Distinct,我有疑问 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 问题是,我需要从雇主那里得到一些独特的记录,但我得到了重复的记录,因为状态。数字会重复,比如222

我有疑问

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
问题是,我需要从雇主那里得到一些独特的记录,但我得到了重复的记录,因为状态。数字会重复,比如2226777等等,我只需要抓取一次。
我不想使用DISTINCT,还有其他方法吗?

按状态使用组

   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

使用GROUP BY on employer id,对于返回的每一行,您将只获得一条雇主记录:

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

首先,每当您在WHERE子句中引用一个左连接的列时,如
statuses.number=2
,都会否定左连接列,并强制其表现为内部连接列

第二,试试这个版本:

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)