从mysql中的值中选择

Posted

技术标签:

【中文标题】从mysql中的值中选择【英文标题】:select from values in mysql 【发布时间】:2012-03-02 05:28:35 【问题描述】:

从值中进行选择的 mysql 方法是什么?

select c from (values (1), (2), (3)) as t(c);

这个想法是能够做这样的事情:

select * from table, (values (1), (2), (3)) as temp(c) where ...;

作为参考,这里是 Postgres 文档: http://www.postgresql.org/docs/9.1/static/sql-values.html

【问题讨论】:

【参考方案1】:

在 MySQL 8.0.19 中,支持此语法。请参考这个official link

mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8);
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |       -2 |        3 |
|        5 |        7 |        9 |
|        4 |        6 |        8 |
+----------+----------+----------+

【讨论】:

在 MariaDB 10.3 中,它是 VALUES (1,-2,3), (5,7,9), (4,6,8);【参考方案2】:

这是解决MySQL 中缺乏WITH 支持的另一种方法:

create temporary table tmp (c int);

insert into tmp (c)
values (1), (2), (3);

select * from tmp;

【讨论】:

谢谢你的回答,太伤心了。【参考方案3】:

从您提供的链接:

值 (1, '一'), (2, '二'), (3, '三'); 这将返回一个两列三行的表格。它实际上相当于: 选择 1 作为列 1,“一个”作为列 2 联合所有 选择 2,“两个” 联合所有 选择 3,“三”;

所以你需要

select * from 
table1,
(
   SELECT 1 AS val
   UNION ALL
   SELECT 2
   UNION ALL 
   SELECT 3 
)b

【讨论】:

这与我的示例等效,但与 Postgres 语法相比似乎需要做很多工作。 MySQL有这样的选择吗? 由于 MySQL 没有任何 VALUES 语法,因此需要做更多的工作。如果您有许多需要检索的值,您可以创建一个过程来通过分隔符拆分您的值,将它们插入到临时表中,然后正确选择它们。这对你来说会更容易吗? 其实我不想检索这些值。我想做一些比“in”更复杂的事情,所以我需要它们在某种临时表中 @cristism:根据 Postgres 所说,我得出结论,在这种情况下,它的 VALUES 只是语法糖,所以UNION ALL 没有性能损失......是的,UNION 语法更冗长... @StelianMatei 使用临时表实现相同的语法是什么?

以上是关于从mysql中的值中选择的主要内容,如果未能解决你的问题,请参考以下文章

使用猫鼬模式将多个选择元素值中的值存储到MongoDB中的数组中

MySQL 从特定值中选择

MySQL 从多个值中选择,只返回完全匹配

MySQL 从每个值中选择 max()

从表中的多个值中选择不在数组中的位置

当php函数从mysql数据值中选择时,“未定义的变量”