我使用了示例数据库来测试两个查询。我期望它们有相同的输出,但输出不同,我不明白为什么。
有人可以向我解释一下吗:
版本 2 代码
SELECT
de.emp_no, de.from_date, de.to_date
FROM
dept_emp_dup de
JOIN
(SELECT
emp_no, MAX(from_date) AS from_date, to_date
FROM
dept_emp_dup
WHERE
to_date > SYSDATE()
GROUP BY emp_no) de1 ON de1.emp_no = de.emp_no
WHERE
de1.to_date = de.to_date;
版本 3 代码
SELECT
de.emp_no, de.from_date, de.to_date
FROM
dept_emp_dup de
JOIN
(SELECT
emp_no, MAX(from_date) AS from_date, to_date
FROM
dept_emp_dup
GROUP BY emp_no) de1 ON de1.emp_no = de.emp_no
WHERE
de1.to_date > SYSDATE()
AND de1.to_date = de.to_date;
下面LINK中的 Excel 文件包含带有
的工作表第一个查询中的子查询格式不正确,不幸的是MySQL接受它并运行它。这是您拥有的代码:
SELECT
emp_no, MAX(from_date) AS from_date, to_date
FROM
dept_emp_dup
WHERE
to_date > SYSDATE()
GROUP BY emp_no
未包含在 GROUP BY 子句中的所有列都应聚合在选择列表中。 有问题的列是
to_date
。简而言之,我应该修改为:
SELECT emp_no, MAX(from_date) AS from_date, to_date
FROM dept_emp_dup
WHERE to_date > SYSDATE()
GROUP BY emp_no, to_date -- added to the GROUP BY clause
或:
SELECT emp_no, MAX(from_date) AS from_date,
MAX(to_date) as to_date -- aggregated with MAX()
FROM dept_emp_dup
WHERE to_date > SYSDATE()
GROUP BY emp_no