【问题标题】: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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-20
          相关资源
          最近更新 更多