将值列表放入没有UNION ALL的结果集中

保罗

我发现了如何在不使用临时表的情况下从值列表制作结果集:

select 12 as id
union all
select 155 as id
union all
select 139 as id
union all
select 11 as id

此结果集可以在以后的各种联接中使用。

现在,我正在寻找一种缩短传递给MySQL的SQL字符串的可能性。理想情况下,可能会出现以下情况:

select (12, 155, 139, 11) as id;

但是MySQL中没有这样的语法。有什么想法吗?

卢卡斯·埃德(Lukas Eder)

您要查找的内容在SQL标准中称为“表值构造函数”,它的工作方式如下:

SELECT id FROM (VALUES (12), (155), (139), (11)) AS t(id)

不幸的是,它在MySQL中不可用。据我所知,至少这些数据库支持它:

  • 粗斜纹
  • DB2
  • 德比
  • 数据库
  • PostgreSQL的
  • SQL服务器
  • Sybase ASE

至少这些数据库不需要,并且需要使用来模拟它UNION ALL

  • MS Access
  • 火鸟
  • Informix
  • 英格利斯
  • 玛丽亚数据库
  • 的MySQL
  • 甲骨文
  • SQLite的
  • Sybase SQL Anywhere

使用IN谓词的解决方法

如果这仅仅是语法(不是性能),那么您当然也可以查询已知至少包含要查找的值的表,然后简单地使用IN谓词列出这些值:

SELECT id FROM some_table WHERE id IN (12, 155, 139, 11)

当然,这可能比UNION ALL解决方案要慢得多

但是在语法上,考虑到根据SQL标准的事实,这是一个明显的解决方法,IN谓词的“在值列表中”实际上只是“表值构造函数”的语法糖(尽管我不相信任何SQL引擎会真正实现该功能)替代语法):

8.4 <in predicate>

2) Let IVL be an <in value list>.

   ( IVL )

   is equivalent to the <table value constructor>:

   ( VALUES IVL )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在UNION ALL结果集中使用聚合函数

来自分类Dev

在结果集中查找SQL值

来自分类Dev

如何在结果集中获取列表?

来自分类Dev

Elasticsearch:避免在结果集中返回“排序”值

来自分类Dev

显示用于在结果集中重复值的空白

来自分类Dev

无法从结果集中读取列值

来自分类Dev

使用选择查询替换结果集中的值

来自分类Dev

从Mule的结果集中获取特定值

来自分类Dev

MySQL将多个查询结果加入1个结果集中

来自分类Dev

使用jQuery或JS从现有值集中过滤结果

来自分类Dev

Union All 返回表中没有记录的值

来自分类Dev

有没有办法将 CSV 的单个结果放入变量中?

来自分类Dev

将查询结果放入Prolog的列表中

来自分类Dev

将查询结果放入Prolog的列表中

来自分类Dev

通过ID查找结果集中的最大值

来自分类Dev

如何在SQL的游标结果集中获取行的最新值

来自分类Dev

结果集中的一个MySQL的变化ID值加盟

来自分类Dev

根据列值的出现从结果集中消除行

来自分类Dev

从riak的结果集中获取一定值的总和

来自分类Dev

MySQL在求和之前检查值是否在结果集中

来自分类Dev

从php中的结果集中获取特定的列值

来自分类Dev

SQL-在结果集中获取每个属性的TOP值

来自分类Dev

从结果集中除法 python 函数生成“零”值

来自分类Dev

对现有 SQL 结果执行查询?从 SQL 结果的子集中查找结果

来自分类Dev

将缺失的月份添加到查询的结果集中

来自分类Dev

猫鼬:将数据添加到返回的结果集中

来自分类Dev

SSIS将oracle变量用于ssis结果集中

来自分类Dev

将混合模型的结果保存在数据集中

来自分类Dev

将缺失的行添加到结果集中

Related 相关文章

热门标签

归档