提问者:小点点

同一数据库在本地/服务器上的不同sql查询结果


我面临一个问题,在相同的数据库上进行相同的查询,在本地服务器和远程服务器上得到不同的结果。

查询是在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

我在本地服务器上得到的结果是好的,正如预期的那样(即使代码可能有点大),但是在远程服务器上,我只收到了部分数据。

局部结果

远程结果


共1个答案

匿名用户

您使用的是Group by Linestations.Position,但有Linestations.*

这意味着--在大多数情况下--您的查询是格式错误的SQL。 没有聚合的列中应该有哪些值?

MySQL在旧版本中恰好支持这一点,但有一个警告,即值来自任意行--这些行可以在不同的行之间更改,在您的情况下,可以在不同的服务器之间更改。

很不清楚你到底想做什么。 但是,使用您正在使用的构造,结果不一致就不足为奇了。 您可以用适当的示例数据,期望的结果以及对您想要实现的逻辑的解释提出一个新问题。

您可以设置参数only_full_group_by,这样MySQL就像其他数据库一样拒绝这样的查询。 这是MySQL最新版本的默认设置。