mysql - mysql版本为5.7.10时查询出错(在mysql 5.6.20有效)

标签 mysql database

我需要迁移到另一台服务器主机,MySQL 版本不同。我要求更改版本,但虽然这没有发生,但我的网站返回错误。

主要错误在此查询中:

SELECT p.*
FROM product p INNER JOIN
     account a
     ON a.id = p.account_id INNER JOIN
     supplier s
     ON a.id = s.account_id
 WHERE p.status = 1 AND a.type = 'supplier' AND
       s.id IN (SELECT supplier_id FROM supplier_location WHERE location_id IN (SELECT _id FROM (SELECT @r AS _id, (SELECT @r := parent_id FROM location WHERE id = _id) AS parent_id FROM (SELECT @r := 3523) vars, location h WHERE @r <> 0) T1 ) ) AND
       p.name LIKE '%nira%'
ORDER BY p.category_id, p.account_id, p.name ASC

在 MySQL 5.6.20 中它可以工作,但在 MySQL 5.7.10 中返回此错误:

Unknown column '_id' in 'where clause'

有人知道怎么解决吗?

谢谢。

最佳答案

您可以通过更改来修复它

(SELECT @r := parent_id FROM location WHERE id = _id)

(SELECT @r := parent_id FROM location WHERE id = @r)

修改后的查询:

SELECT p.*
FROM product p INNER JOIN
     account a
     ON a.id = p.account_id INNER JOIN
     supplier s
     ON a.id = s.account_id
 WHERE p.status = 1 AND a.type = 'supplier' AND
       s.id IN (SELECT supplier_id FROM supplier_location WHERE location_id IN (SELECT _id FROM (SELECT @r AS _id, (SELECT @r := parent_id FROM location WHERE id = @r) AS parent_id FROM (SELECT @r := 3523) vars, location h WHERE @r <> 0) T1 ) ) AND
       p.name LIKE '%nira%'
ORDER BY p.category_id, p.account_id, p.name ASC

关于mysql - mysql版本为5.7.10时查询出错(在mysql 5.6.20有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35960102/

相关文章:

mysql - 如何显示 child 的 child ?

php - SQL - 添加列值单表

java - 实现从数据库到表单的下一个和上一个

c# - Elasticsearch 和 C# - 查询以查找字符串的精确匹配

php - 使用 php 在下拉列表中从 MSSQL 中获取数据

mysql - 双重计数语句MySQL查询

mysql - ORDER BY 查询非常慢

mysql - 使用 Json_value 的 T-sql 语法不正确

php - 具有匿名用户的数据库

MySQL 使用 ORDER BY 查询速度变慢