【问题标题】:Select unique rows in mysql query在mysql查询中选择唯一行
【发布时间】:2011-08-05 21:51:51
【问题描述】:
我有疑问
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 还有其他方法吗?
【问题讨论】:
标签:
mysql
unique
distinct
【解决方案1】:
使用 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
【解决方案2】:
在雇主 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
【解决方案3】:
首先,每当您在 WHERE 子句中引用 LEFT JOINed 列时,例如 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)