考虑以下查询:
select FEE_NUMBER
from CARRIER_FEE CF
left outer join CONTYPE_FEE_LIST cfl on CF.CAR_FEE_ID=cfl.CAR_FEE_ID and cfl.CONT_TYPE_ID=3
where CF.SEQ_NO = (
select max(CF2.SEQ_NO) from CARRIER_FEE CF2
where CF2.FEE_NUMBER=CF.FEE_NUMBER
and CF2.COMPANY_ID=CF.COMPANY_ID
group by CF2.FEE_NUMBER)
group by CF.CAR_FEE_ID
在我的笔记本电脑上,这不会返回任何结果。在我的服务器上使用完全相同的(转储的)数据库,它确实会返回结果。
如果我在笔记本电脑上运行 EXPLAIN,我会得到这个
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | func | 66 | Using where; Using temporary; Using filesort |
而在我的所有其他服务器上它都给出了这个(注意 ref 列中的区别)
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | odysseyB.CF.COMPANY_ID | 66 | Using where; Using temporary; Using filesort |
如果我删除连接、子查询或最后一个分组依据,那么我会得到预期的结果。
我假设这是一个配置问题,但它不是我以前见过的问题。有人知道是什么原因造成的吗?
我的笔记本电脑运行的是 OSX 10.6 和 MySQL 5.0.41。另一台运行 OSX 10.5.7 和 MySQL 5.0.37 的笔记本电脑运行良好,运行 MySQL 5.0.27 的 Linux 服务器也是如此。
谁能解释一个使用 ref=func 的解释计划与另一个使用 ref=odysseyB.CF.COMPANY_ID 的解释计划之间的区别?
谢谢。
最佳答案
在两台机器上:
mysql> SHOW CREATE TABLE CARRIER_FEE CF;
确保两个表引擎类型相同。
此外,由于您在出现错误的机器上使用 OS X 10.6?也许该操作系统上的数据类型具有与 10.5.x 不同的质量。
似乎人们对雪豹有兼容性问题。尝试在 10.6 笔记本电脑上安装 MySQL 5.4。
http://forums.mysql.com/read.php?10,278942,278942#msg-278942
关于sql - MySQL解释异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1390459/