mysql - 如何创建可在集合表达式中使用的用户定义变量?

标签 mysql

我想做这个

set @a =(1,2,3);
select * from mytable where somefield in @a;

但是mysql不喜欢它。

我该怎么做?

最佳答案

解决这个问题的一种方法

SET @a = '1,2,3';
SELECT * 
  FROM mytable 
 WHERE FIND_IN_SET(somefield, @a) > 0;

注意:这将有效地导致全面扫描。

<小时/>

恕我直言,您最好不要包含字符串的用户变量

SELECT * 
  FROM mytable t JOIN
(
  SELECT 1 somefield UNION ALL
  SELECT 2 UNION ALL
  SELECT 3
) q
    ON t.somefield = q.somefield;
<小时/>

还有一个选择是利用动态 SQL

SET @a = '1,2,3';
SET @sql = CONCAT('SELECT * FROM mytable WHERE somefield IN(', @a, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这里是SQLFiddle 所有查询的演示

关于mysql - 如何创建可在集合表达式中使用的用户定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20890797/

相关文章:

python - 在具有现有值的现有数据库表中添加新的唯一字段 - Django1.7/MySql

mysql查询帮助(合并行)

php - 数据馈送至 MySQL

javascript - Node.js 应用程序中的 SequelizeConnectionError

php - 无法更新日期字段 - MySQL PHP

mysql - 正确进行 SQL 查询

java - 为什么更新查询不更新Mysql数据库中的日期

java - 无法在 Java 中连接到 MySQL 数据库

php - 使用php仅将txt文件中的某些行加载到mysql表中

MySQL - 连接 2 个表和组值