我不明白为什么这不起作用,我有一个列,我在我的“Mysql”数据库中存储以逗号分隔的值,然后我想连接两个表以获得结果。例如:
SELECT *
FROM users u INNER JOIN
groups g
ON u.id IN ( g.ownerId )
WHERE u.active='1' AND g.gid='15';
g.ownerId
在这个senerio中的值为'175,178'。
出于某种原因,这只会返回 ownerId 175 的连接结果。但是如果我在 IN 子句中手动输入值 ( 175, 178 ),则会显示两行。为什么不使用 ownerId 列中的两个值?
我试过这个来“分离”值或强制一个“列表”,但它没有用...... SELECT * FROM users u INNER JOIN groups g ON u.id IN ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(g.ownerId, ',', 1), ' ', -1) as x, SUBSTRING_INDEX(SUBSTRING_INDEX(g.ownerId, ',', 2), ' ', -1) as y ) where g.groupId='15'
有没有人以前遇到过这种情况或知道该怎么办?
最佳答案
它不起作用,因为 in
值由一个列表组成,其中有一个元素恰好有一个逗号。它相当于:
on uid = '175,178'
您可以将逻辑替换为 find_in_set()
:
on find_in_set(uid, g.id) > 0
但是,您真的应该了解联结表以及为什么您的数据结构糟糕、糟糕、糟糕:
- 您将数字存储为字符串。
- 您有外键关系,但无法声明它们。
- 您不恰本地使用了字符串操作。
- 您的查询不能使用索引。
修复数据结构。
关于mysql - 使用列值作为 IN MySql 的子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36535040/