我有一个由 DataMapper(CodeIgniter 的 ORM)生成的查询,它在一台服务器上返回结果,但在另一台服务器上没有。
两个数据库完全相同。该查询适用于 MYSQL 版本 5.1.41、5.1.63 和 5.5.20 的服务器,但在 5.1.52 上失败。
查询是:
SELECT DISTINCT `clients`.`id`
FROM (`clients`)
LEFT OUTER JOIN `clients_locations`
clients_locations ON `clients`.`id` = `clients_locations`.`client_id`
LEFT OUTER JOIN `locations`
locations ON `locations`.`id` = `clients_locations`.`location_id`
LEFT OUTER JOIN `reports`
location_reports ON `locations`.`id` = `location_reports`.`location_id`
WHERE
`location_reports`.`id` = 1
AND
`clients`.`id` = 2
我做了一些测试,我发现了以下几点:
如果您只有 1 个 WHERE 子句,它会返回结果。
如果将任何运算符更改为 LIKE、!= 等,它会返回结果
如果将 AND 更改为 OR,它会返回结果。
整个站点都使用了类似的查询,所以我不知道为什么这个查询失败了。例如:
SELECT DISTINCT `clients`.`id`
FROM (`clients`)
LEFT OUTER JOIN `clients_locations`
clients_locations ON `clients`.`id` = `clients_locations`.`client_id`
LEFT OUTER JOIN `locations`
locations ON `locations`.`id` = `clients_locations`.`location_id`
LEFT OUTER JOIN
`locations_questionnaires` location_locations_questionnaires
ON
`locations`.`id` = `location_locations_questionnaires`.`location_id`
WHERE
`location_locations_questionnaires`.`questionnaire_id` = 3
AND
`clients`.`id` = 2
在上面列出的所有服务器上返回正确的结果。
有没有人见过这个?
澄清:
我无法编辑 SQL,因为它是由 ORM 生成的。
两个数据集完全相同。
问题是为什么查询在一台服务器上没有返回任何结果,而在另一台服务器上返回。
更新:我刚刚将服务器升级到 5.1.61,查询运行良好。所以看起来这是 5.1.52 中的一个错误。