mysql - 如何使无引号、逗号分隔的 ID 列表适用于 MySQL 中的 IN 子句

标签 mysql sql

情况如下:我正在对非规范化表运行查询(在 MySQL 中)。不是我建的,别怪我。此表中的一列由逗号分隔 image_ids 列表组成。

这些图像 ID 对应于第二个表中的主键

我正在尝试在我的SQL中执行LEFT JOIN,以便将图像附加到内容:

LEFT JOIN image ON image.id IN (content.imageIDs)

此错误是因为 content.imageIDs 未用引号引起来,而只是 12345,67890, 等。

如果我可以将这些单独的 ID 用引号括起来,它应该可以工作。但是,我不知道如何做到这一点。

LEFT JOIN image ON image.id IN (REPLACE(content.imageIDs, ',', '\',\''))

这让我更接近,但现在我错过了开始和结束引号。我尝试使用 CONCAT() 添加这些,这不会导致错误,但也没有结果。

最佳答案

在 MySQL 中执行此操作的“正常”方法是:

LEFT JOIN image ON find_in_set(image.id, content.imageIDs) > 0

在 MySQL 和许多其他数据库中工作的一般方法是:

LEFT JOIN image on content.imageIDs like concat('%,', image, ',%') 

(尽管字符串连接函数通常因数据库而异)。

关于mysql - 如何使无引号、逗号分隔的 ID 列表适用于 MySQL 中的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16991178/

相关文章:

sql - 消除sql语句中的重复值

mysql - 如何使用索引改进我的sql select?

SQL: "Reverse"转置表

java - 如何取所选列所选行的总和值

php - Mysql如何过滤结果

mysql - 验证 JSF 实体中的持久日期

php - 将 android 与 MYSQL 和 PHP localhost 连接

java - 如何在 Java 中克隆 MySQL 数据库

mysql - 非典型 Mysql Query 的执行顺序

sql - 扭曲的adbapi : number affected rows and last insert id