在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)