MySQL 选择带有替换的子查询

标签 mysql

所以我有一个格式类似于;1;;2;的数据然后我需要在查询中使用这个数字,所以我想将其转换为 1,2 并在 IN 条件中使用它。在我的表中,结果应返回 2 行,但实际上只返回 1 行。

我的查询是这样的。子查询返回 1,2 没有问题,但只检索到 1 行。

select * 
 from wt_lists 
where id IN ((select replace (replace(sendto, ';;',','),';','') 
               from wt_stats where statsid IN (1)))

但是当我用这个尝试时。它返回正确的结果,在我的例子中是 2 行。

select * 
  from wt_lists 
 where id IN (1,2)

我在这里缺少什么?

最佳答案

需要在查询中显式定义逗号分隔字符串才能在 IN 子句中使用 - SO 上有无数示例,人们需要使用动态 SQL 来合并用户提交的逗号分隔字符串。

也就是说,我有一个使用 FIND_IN_SET function 的解决方案:

SELECT DISTINCT wl.* 
  FROM WT_LISTS wl
  JOIN (SELECT REPLACE(REPLACE(ws.sendto, ';;',','),';','') AS ids
          FROM WT_STATS ws
         WHERE ws.statsid = 1) x ON FIND_IN_SET(wl.id, x.ids) > 0

关于MySQL 选择带有替换的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123726/

相关文章:

mysql - 将 Laravel 项目连接到在 CPanel 上创建的远程 MySQL

PHP 如何在处理另一个表单后保持在同一页面?

使用 Spring + Hibernate 创建 MySQL 表

mysql - 从 MySQL 到 Oracle

mysql - 自动将 0 添加到 int 字段 - mysql

mysql - 跨列和行计算值的实例

php - MySQL、PHP;检测 dateTimePicker 日期是否已被使用并禁用它

mysql 在 win7 和 debian8 上产生不同的结果

mysql - 复杂的 SQL 连接查询 - 获取最新行

mysql - 获取顶级用户排名位置取决于连接查询的最大计数