我想用MySQL(v.5.5.41)执行该查询,该查询适用于Oracle:
CLEAR BREAKS;
BREAK ON mq;
SELECT mq, im, pf, kmct
FROM vehicules
WHERE mq='Renault'
ORDER BY mq;
CLEAR BREAKS;
这是Oracle构建的输出,以及我正在使用MySQL寻找的内容:
mq | im | pf | kmct
---------+-------------+------+----------
Renault | AA-888-AA | 4 | 3424
---------+-------------+------+----------
| AA-999-AA | 2 | 2042
---------+-------------+------+----------
| BB-888-BB | 3 | 1580
我得到的错误是:
#1064 - 您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的"清除中断"附近使用的正确语法
似乎MySQL中没有实现命令"BREAK"。这是真的吗?在这种情况下,有什么方法可以模拟它吗?
MySQL
不支持BREAK ON
。AFAIK 它是 ORACLE 中的报告样式命令。
要实现所需的输出,您必须记住上一个读取行的列值,并与下一行列中读取的值进行比较。当它们匹配时,您可以将空字符串设置为输出,否则保留新值。
示例:
SELECT
( CASE WHEN @prev_mq != mq THEN @prev_mq := mq ELSE '' END ) AS mq
, im, pf, kmct
FROM vehicules, ( SELECT @prev_mq := '' ) AS initializer
WHERE mq = 'Renault'
-- ORDER BY mq;
使用ORDER BY mq
在这里没有任何意义。因为,当您用空字符串替换重复出现时,ORDER BY
会导致意外的结果。