To simplify the question, I create a table
CREATE TABLE `a` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`link_id` int(11) DEFAULT NULL,
`seq` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
And the sql is
SELECT A.*
FROM
(SELECT ifnull(S.seq, L.seq) AS seq
FROM a L
LEFT JOIN a S ON L.link_id = S.id) AS A
ORDER BY A.seq DESC LIMIT ?
The code is good with mysql 5.6, But in mysql 5.7 it throw an error Error 1054: Unknown column 'A.seq' in 'order clause'
I try it with golang and nodejs
package main
import (
"github.com/jmoiron/sqlx"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
host := "127.0.0.1"
user := "root"
password := "123456"
tmpdb, _ := sqlx.Open("mysql", fmt.Sprintf("%s:%s@(%s:3306)/test?charset=utf8&readTimeout=30s&writeTimeout=30s&timeout=30s", user, password, host))
sql := "select A.* from (select ifnull(S.seq, L.seq) as seq from a L left join a S on L.link_id = S.id ) AS A order by A.seq desc limit ?"
test := make([]interface{},0)
err := tmpdb.Select(&test, sql, 10)
fmt.Println(err, test)
}
It's weird that if i modify the sql, replace order by A.seq
to order by seq
, it's working again. And if i use complete sql without parameterized way, it's also working I wonder what is wrong?