【问题标题】:Is it possible to create a table and then to select from it in one query?是否可以创建一个表,然后在一个查询中从中进行选择?
【发布时间】:2013-05-22 07:16:58
【问题描述】:

我很好奇是否有办法在表上进行选择,该表本身就是选择的产物。类似的东西(伪)

    select a,b,c from 
(select id as a, name as b, phone as c, date as d from some_table) 
where  d = now();

因此,实际上括号将返回一个表,其列由as 定义,然后外部select 可以去查询该结果。

如果不完全是这样,我很想知道我可以使用什么模糊的类似方法。

我需要这个的原因是我有一个相当广泛的数据透视查询,我在我的用户数据上运行,我希望能够从相当大的结果中进行选择。

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 好吧...这个 *exact 语法是错误的,并且其他各种尝试都不起作用,所以,我想知道正确的方法是什么,或者它是否可能。
  • 定义“错了”。我只能看到d 列是未知的,应该在括号内。
  • 在您的第一个查询中创建一个视图,然后从该视图中选择?
  • 对,所以...我需要 d 列对外部选择可见,就像那里有一个实际的表名而不是 (select stuff) 一样。这就是我问题的症结所在。

标签: mysql


【解决方案1】:

您可能遇到了一个错误,上面写着“派生表需要别名”

以下作品:

select a,b,c 
from (
     select id as a, 
            name as b, 
            phone as c, 
            some_date as d 
     from some_table
) as t 
where  d <= now();

别名t 定义了一个所谓的派生表。

SQLFiddle:http://sqlfiddle.com/#!2/05fd6/2

【讨论】:

    【解决方案2】:

    是的,这是可能的。试试这个:

    select A.a,A.b,A.c from 
    (select id as a, name as b, phone as c, date as d from some_table where  d = now()) A
    

    它被称为派生表。

    要将WHERE 移到子查询之外:

    select A.a,A.b,A.c, A.d from 
    (select id as a, name as b, phone as c, date as d from some_table) A
    where A.d = now()
    

    【讨论】:

    • 不,它被称为“派生表”。
    • 关于创建表的查询的哪一部分?
    • 这看起来很有希望......有没有办法将 where 移到外部选择?我意识到 *this example 没有任何明显的理由这样做,但在我的真实世界查询中,我确实需要根据一些标准来剔除结果。
    • @Dr.Dredel 我用派生表外的d 更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2021-08-04
    • 2011-03-13
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多