我的manage
表格中有user
列,其中包含字符串'2','3','4','5','6'
,这些数字引用用户“管理”的user.id
。
STATMENT:
SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)
问题: 为什么我的陈述什么都没有回来?
答案 0 :(得分:3)
您可以创建一个新表user_manages
,其中包含两列:manager_id
和user_id
。在表中为经理管理的每个用户创建一条新记录。然后你可以在两个表之间建立连接。
SELECT user.* FROM user_manages
INNER JOIN user ON user.id = user_manages.user_id
WHERE user_manages.manager_id = 1
答案 1 :(得分:2)
in
适用于值的列表,而不是单个字符串值。因此,如果您有这样的值val in ('1,2,3')
,则为val = '1,2,3'
。
出于多种原因,在单个列中存储多个值是个坏主意:
正确的解决方案是一个单独的表,称为联结表。
有时,唉,我们很难接受其他人糟糕的设计决定。
如果是,您可以使用find_in_set()
:
SELECT u.*
FROM user u
WHERE EXISTS (SELECT 1 FROM user u2 WHERE u2.id = 1 AND find_in_set(u.id, u2.manage) > 0);
注意:这假定字符串以逗号分隔,没有空格或引号。您可能需要使用replace()
以正确的格式获取字符串。