使用内联数据模拟MySQL记录

使用内联数据模拟MySQL记录,mysql,sql,Mysql,Sql,这听起来可能是个奇怪的问题,但我很想知道这是否可能 有没有一种方法可以使用内联数据模拟MySQL记录?例如,如果可能的话,我希望它能像这样工作: SELECT inlinedata.* FROM ( ('Emily' AS name, 26 AS age), ('Paul' AS name, 56 AS age) ) AS inlinedata ORDER BY age 不幸的是,MySQL不支持这种类型的标准值行构造函数,因此需要为每一行使用一个“虚拟”选择,并使用UNION ALL

这听起来可能是个奇怪的问题,但我很想知道这是否可能

有没有一种方法可以使用内联数据模拟MySQL记录?例如,如果可能的话,我希望它能像这样工作:

SELECT inlinedata.*
FROM (
  ('Emily' AS name, 26 AS age),
  ('Paul' AS name, 56 AS age)
) AS inlinedata
ORDER BY age

不幸的是,MySQL不支持这种类型的标准
行构造函数,因此需要为每一行使用一个“虚拟”选择,并使用
UNION ALL

SELECT *
FROM (
  select 'Emily' AS name, 26 AS age 
  union all 
  select 'Paul', 56
) AS inlinedata
ORDER BY age
UNION ALL
有两个用途

  • 它保留了您可能有意拥有的任何副本
  • 它比普通的
    UNION
    快一点点(因为它不检查重复项)

  • 不,这会使它变得复杂,但您可以创建一个临时表,并查询它。当前客户端会话终止时,将删除临时表

    您可以像查询其他表一样查询它们并向其中插入数据。创建它们时,必须使用临时关键字,如下所示:

    CREATE TEMPORARY TABLE ...
    

    这样,如果需要,您还可以在多个查询中重用数据,不存储任何数据,并且您查询的所有记录都具有正确的结构(而您在示例中给出的语法在拼写列名错误时会产生问题)…

    a好的,您可以创建临时表并从中选择您实际上不需要包装器的表。@草莓:在这个简化的示例中,您不需要包装器,这是正确的。但我认为这样做更清楚(当然这是个人偏好)——如果你开始加入这个派生表,你确实需要它。你能展示一下第三行是如何工作的吗?我正在努力,但失败了。这将有助于回答更多的情况。