情况如下:我正在对非规范化表运行查询(在 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/