gpt4 book ai didi

Mysql 哪里没有按预期工作

转载 作者:行者123 更新时间:2023-11-29 02:57:49 24 4
gpt4 key购买 nike

我有以下查询:

SELECT 

`tests`.`id`,
`tests`.`created_at`,
`tests`.`updated_at`,
`tests`.`created_by`,
`tests`.`date_of_test`,
`tests`.`location`,
`tests`.`information`,
`tests`.`title`,
`tests`.`goals`,
`tests`.`deleted_at`,
`tests`.`status`,
`tests`.`tester`,
`tests`.`test_approach`

FROM `tests`

WHERE

`tests`.`id` IN (
SELECT `test_wobble`.`test_id`
FROM `project_wobble`
INNER JOIN `wobbles` ON `project_wobble`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profiles` ON `wobble_profiles`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profile_user` ON `wobble_profile_user`.`wobble_profile_id` = `wobble_profiles`.`id`
INNER JOIN `test_wobble` ON `test_wobble`.`wobble_id` = `wobbles`.`id`
WHERE `project_wobble`.`project_id` = '2' AND `wobble_profile_user`.`user_id` = '3'
GROUP BY `wobbles`.`id`
)

GROUP BY `tests`.`id`
ORDER BY tests.date_of_test DESC

如果我自己运行 IN 查询,它会返回

  • 1 结果
  • 值为13
  • 该列名为 "test_id"

当我运行上面的整个查询时,我得到了

  • 2 结果从测试表返回...
  • 具有不同的 ID...1314

如果我将 IN 查询替换为数字 13... SQL 返回 1 结果(正确的).

我做错了什么?

最佳答案

这个查询:

SELECT `test_wobble`.`test_id`
FROM `project_wobble`
INNER JOIN `wobbles` ON `project_wobble`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profiles` ON `wobble_profiles`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profile_user` ON `wobble_profile_user`.`wobble_profile_id` = `wobble_profiles`.`id`
INNER JOIN `test_wobble` ON `test_wobble`.`wobble_id` = `wobbles`.`id`
WHERE `project_wobble`.`project_id` = '2' AND `wobble_profile_user`.`user_id` = '3'
GROUP BY `wobbles`.`id`

wobbles.id 分组,但返回 test_wobble.test_id,它不是 GROUP BY 的一部分。

在每次迭代中,MySQL 将 IN 字段推送到此查询中:

SELECT `test_wobble`.`test_id`
FROM `project_wobble`
INNER JOIN `wobbles` ON `project_wobble`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profiles` ON `wobble_profiles`.`wobble_id` = `wobbles`.`id`
INNER JOIN `wobble_profile_user` ON `wobble_profile_user`.`wobble_profile_id` = `wobble_profiles`.`id`
INNER JOIN `test_wobble` ON `test_wobble`.`wobble_id` = `wobbles`.`id`
WHERE `project_wobble`.`project_id` = '2' AND `wobble_profile_user`.`user_id` = '3'

-- This is implicitly added by MySQL when optimizing
AND `test_wobble`.`test_id` = `tests`.`id`
GROUP BY `wobbles`.`id`

然后检查是否存在某个值。

如果从 IN 查询中删除 GROUP BY,您会看到它同时包含 1314,但是当您使用 GROUP BY 运行查询时,只会返回其中一个。

您也可以尝试运行第二个查询,用 13 和 14 代替 tests.id 并确保查询在这两种情况下都返回一些内容。

这实际上可能被认为是 MySQL 中的错误。但是,由于文档没有指定将从分组查询返回哪个未分组和未聚合的表达式,因此最好明确指定它,否则优化器的副作用会像本例中的 do 一样发挥作用。

您能否提供一些数据示例并概述您将通过查询实现的目标?

关于Mysql 哪里没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com