Чтобы упростить вопрос, я создаю таблицу
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;
И 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 ?
Код хорошо с MySQL 5.6, но в MySQL 5.7 он выдает ошибкуError 1054: Unknown column 'A.seq' in 'order clause'
Я пробую это с golang и 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)
}
Странно, что если я изменю sql, заменив order by A.seq
на order by seq
, он снова заработает.И если я использую полный SQL без параметризованного пути, это также работает, интересно, что не так?