我面临一个问题,在相同的数据库上进行相同的查询,在本地服务器和远程服务器上得到不同的结果。
查询是在3个单独的表上连接的,第一个(line_stations)应该是由第二个(teams)过滤的数据的基础,然后显示来自第三个(lista)的计数的输入,并且有一定的条件,但是如果没有计数的输入,也显示零。
SELECT
line_stations.*,
COUNT(lista.position)
FROM
lista
RIGHT JOIN
(
line_stations
INNER JOIN
teams ON line_stations.line = teams.line
) ON(
lista.position= line_stations.position
)
WHERE
(
line_stations.zone = 'Ruting' AND teams.team= 'V526-1' AND lista.team = 'V526-1' AND lista.input_date = '2020-06-08'
) OR(
line_stations.zone = 'Ruting' AND teams.team = 'V526-1' AND lista.input_date IS NULL
)
GROUP BY
line_stations.position
ORDER BY
line_stations.sort_no
我在本地服务器上得到的结果是好的,正如预期的那样(即使代码可能有点大),但是在远程服务器上,我只收到了部分数据。
局部结果
远程结果
您使用的是Group by Linestations.Position
,但有Linestations.*
。
这意味着--在大多数情况下--您的查询是格式错误的SQL。 没有聚合的列中应该有哪些值?
MySQL在旧版本中恰好支持这一点,但有一个警告,即值来自任意行--这些行可以在不同的行之间更改,在您的情况下,可以在不同的服务器之间更改。
很不清楚你到底想做什么。 但是,使用您正在使用的构造,结果不一致就不足为奇了。 您可以用适当的示例数据,期望的结果以及对您想要实现的逻辑的解释提出一个新问题。
您可以设置参数only_full_group_by
,这样MySQL就像其他数据库一样拒绝这样的查询。 这是MySQL最新版本的默认设置。