【问题标题】:MySql View - Value from one column where some other column is maxMySql View - 来自另一列最大值的一列的值
【发布时间】:2009-09-03 20:40:50
【问题描述】:

我在 Table1.ID 上有 Table1 和 Table2 相关的。对于给定的 Table1.ID,可以有零个或多个 Table2 记录。我有一个要获取 Table2.Value 的视图,其中 Table2.ID 是给定 Table1.ID 的最大值。一位朋友建议使用派生表,但这需要在 from 子句中使用子查询,而 MySQL 不喜欢这样。还有其他方法可以做到这一点吗?我尝试设置一个辅助视图来代替子查询,但它似乎很慢。我还尝试使用 having 子句来测试 Table2.ID = MAX(Table2.ID),但它无法识别该列,除非我将它放入 group by,这会搞砸其他一切。

【问题讨论】:

  • 您使用的是什么版本的 MySQL?如果您使用的是 5.x,子查询应该没问题
  • 我使用的是 v5.0。我读过的文档和我得到的错误表明视图中不允许 from 子句中的子查询。仅在 5.0 中吗?
  • 这是 MySQL 中的一个开放错误:bugs.mysql.com/bug.php?id=12755

标签: mysql view subquery


【解决方案1】:
SELECT t1.*, t2a.*
FROM Table1 t1
LEFT JOIN Table2 t2a
 ON (t1.table1_id = t2a.table1_id)
LEFT JOIN Table2 t2b
 ON (t1.table1_id = t2b.table1_id AND t2a.table2_id < t2b.table2_id)
WHERE t2b.table2_id IS NULL
 AND t1.table1_id = ?;

【讨论】:

  • 效果很好!比辅助视图快得多。谢谢。使用这种方法我应该注意什么性能问题?关于表大小或索引或任何东西?
  • 嗯,你应该总是用 EXPLAIN 分析任何你需要有良好性能的查询,并尝试确保它很好地使用索引而不是文件排序/临时表。但这个查询的可扩展性与您在规范化数据库中所能获得的一样多。
  • 听起来不错。再次感谢您的帮助。
猜你喜欢
  • 2018-08-25
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多