我用一个示例数据库测试了两个查询。我希望它们有相同的输出,但输出是不同的,我不明白为什么。
有没有人能给我解释一下:
1.为什么版本3提供的输出与版本2不同?
1.第10行24行33行41行50行59行67行73行100行132行139行147行162行169行是什么原因导致它们被排除在第3版输出之外?我找不到任何区别于输出中包含的所有其他行的因素。
版本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;
型
以下链接中的Excel文件包含以下工作表
1.完整数据
1.在Excel中过滤的正确输出
1.版本2查询输出
1.版本3查询输出
1条答案
按热度按时间yptwkmov1#
第一个查询中的子查询格式不好,不幸的是MySQL接受了它并运行它。这是你拥有的代码:
字符串
所有没有包含在GROUP BY子句中的列都应该在选择列表中聚合。* 违规列 * 是
to_date
。简而言之,它应该修改为:型
或:
型