从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中的值中选择的主要内容,如果未能解决你的问题,请参考以下文章