использование лимита и подзапроса с параметризованным не работает в mysql5.7, и это хорошо в mysql 5.6 - PullRequest
0 голосов
/ 27 января 2019

Чтобы упростить вопрос, я создаю таблицу

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 без параметризованного пути, это также работает, интересно, что не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...