代码之家  ›  专栏  ›  技术社区  ›  Davit Zeynalyan

仅查找一条记录的分组查询(Employee_id=1或空)

  •  -2
  • Davit Zeynalyan  · 技术社区  · 6 年前

    我的数据库信息是
    enter image description here

    如果员工ID具有该记录的值,我不会为每个工作日获取唯一记录,否则员工ID为空。 我试过这个问题

    SELECT 
      * 
    FROM
      `calendar` 
    WHERE `employee_id` = 1 
      OR `employee_id` IS NULL 
    GROUP BY `weekday` 
    

    结果是

    enter image description here

    但我希望

    enter image description here

    你能帮助我吗?谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Davit Zeynalyan    6 年前

    试试这个:

    SELECT 
      b.calendar_id,
      a.employee_id,
      a.weekday 
    FROM
      (SELECT 
        `weekday`,
        MAX(employee_id) AS employee_id 
      FROM
        calendar 
      WHERE employee_id = 1 
        OR employee_id IS NULL 
      GROUP BY `weekday`) a 
      LEFT JOIN calendar b 
        ON a.weekday = b.weekday 
        AND a.employee_id = b.employee_id ;
    

    如果有任何澄清,请通知我。

        2
  •  0
  •   sticky bit    6 年前

    问题是,在列表中 SELECT ,不会出现在 GROUP BY 表达式也没有应用聚合函数。与大多数其他DBMS不同,MySQL在旧版本(或具有某些设置)中允许这样做,但结果可能是垃圾。

    通过将列包含在 分组依据 表达式或对其应用聚合函数。例如:

    SELECT max(`employee_id`),
           `weekday`
           FROM `calendar` 
           WHERE `employee_id` = 1 
                  OR `employee_id` IS NULL 
           GROUP BY `weekday`;
    

    注意 max() 上的聚合函数 employee_id .