mysql - 如何在 mysql 中设置本地列表/元组变量

标签 mysql sql

有没有办法在 mysql 中执行以下操作?

SET @studios = ('Disney', 'Warner Bros.', 'Fox');
SELECT * FROM movies WHERE provider IN @studios;

当我尝试执行上述操作时出现错误:

Operand should contain 1 column(s)

最佳答案

错误来自您的初始分配。您不能将列表分配给变量。

在 MySQL 中执行此操作的唯一方法是创建一个临时表来保存值,然后执行 ... IN (SELECT someVal FROM thatTemp),或者动态创建查询直接在查询字符串中使用值。


示例临时表创建:

CREATE TEMPORARY TABLE `someTemp` ( someVal VARCHAR(16) );
INSERT INTO `someTemp` (someVal) VALUES ('a'), ('b'), ('c');
SELECT * FROM myTable WHERE myField IN (SELECT someVal FROM someTemp);
DELETE TEMPORARY TABLE `someTemp`;

或者,还有 FIND_IN_SET ,可以这样使用:

SET @list = 'a,b,c';
SELECT * FROM myTable WHERE FIND_IN_SET(myField, @list) <> 0;

但此方法的性能可能极差(如果您的“myField”值可能包含逗号,则可能无法使用)。

关于mysql - 如何在 mysql 中设置本地列表/元组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53231415/

相关文章:

php - 大数据库大小 - phpMyAdmin 会发生什么?

mysql - 添加 TOP 的 DELETE 查询

sql - 在 View 中执行存储过程?

mysql - SQL通过将列舍入到最接近的值来返回基于两列的不同行

mysql - 根据列值连接多个表

MYSQL 查询中相关子查询

如果子查询没有结果,MySQL 应该返回行

php - 使用准备好的语句更新记录,检查更新是否有效

mysql - 将查询 SQL 转换为 PostgreSQL

mysql - 如何使用MySQL创建按时间戳按最接近价格选择ID的 View