子查询中应用不同
一:查询结果集的列,在子查询的查询结果集表不同
这个是我用到的表。
CREATE TABLE `c_num_day` (
`day_num` int(11) NOT NULL,
PRIMARY KEY (`day_num`) USING BTREE
);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (1);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (2);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (3);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (4);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (5);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (6);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (7);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (8);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (9);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (11);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (12);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (13);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (14);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (15);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (16);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (17);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (18);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (19);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (20);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (21);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (22);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (23);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (24);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (25);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (26);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (27);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (28);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (29);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (30);
INSERT INTO `asd380`.`c_num_day`(`day_num`) VALUES (31);
俩个数据库分别执行下面sql。
select d1.day_num,
(select count(1) from (select DISTINCT day_num from c_num_day d2 where d2.day_num<d1.day_num) d3) 前面有几天
from c_num_day d1
where day_num < day(now());
MySQL Server 8.0会正常执行
MariaDB 10.5执行报错,Unknown column ‘d1.day_num’ in ‘where clause’,意思是“WHERE子句”中的未知列“d1.day_num”
我还经过了各种测试,也查看了MariaDB 10.5 对表的优化,不做其他测试和资料的表述。可以肯定,查询的结果集的列(d1.day_num),不能在子查询的查询结果集表(d3)中使用。mysql支持。
碰到这个是我在公司开发好了,用的是 MySQL Server 8.0。拿给现场人使用,现场人说报错,然后发现用的是MariaDB 10.5。当然真实碰到的sql 远不止这么简单。