【问题标题】:MySQL: is there any MySQL workaround for this simple view subquery?MySQL:对于这个简单的视图子查询是否有任何 MySQL 解决方法?
【发布时间】:2014-03-24 11:52:28
【问题描述】:

我知道我不能在 from 子句中为 MySQL 中的视图执行子查询。 (错误 1349)

这个简单的语句有什么解决方法吗?

CREATE VIEW view as 
   SELECT * FROM
   (
       SELECT Credits.ID,Credits,Bonus 
       FROM Credits,Bonus 
       WHERE Credits.ID = Bonus.ID
       ORDER BY Credits.Date DESC, Bonus.Date DESC
   ) as tmp
   GROUP BY ID

这是我想要的 ID Credits Bonus 1 1300 2 2 23 40 3 3045 134


已解决

我通过相关的 sql 查询解决了这个问题。

【问题讨论】:

  • 你想要达到什么目的?您能否发布一些示例数据和一些预期输出?
  • 只是一个想法,但可能不是最好的方法。您可以使用现有视图创建视图。换句话说,从您的子查询创建一个视图,然后在您的 FROM 子句中使用该视图创建一个视图。不过,这可能会降低您的表现。
  • 我通过相关的 sql 查询解决了这个问题。

标签: mysql view subquery


【解决方案1】:

是的。首先,正确编写查询。您的查询取决于子查询中实际工作的 order by,尽管 MySQL 不保证这一点。

我推测您想要来自credits 的记录以及最新的bonus 记录。如果没有样本数据、期望的结果和数据布局,就很难解释查询。

相反,您应该使用not exists:

CREATE VIEW view as 
    select c.ID, c.Credits, b.Bonus
    from credits c join
         bonus b
         on c.id = b.id
    where not exists (select 1
                      from bonus b2
                      where b2.id = b.id and b2.date > b.date
                     );

where(和select 子句)中允许子查询。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多