[英]select statement within select
我的user
表中有一个manage
列,其中包含字符串'2','3','4','5','6'
,这些数字引用用户“管理”的user.id
声明:
SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)
问题: 为什么我的陈述什么也没返回?
您可以创建一个新表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
in
值列表上工作,而不是单个字符串值。 因此,如果您具有类似val in ('1,2,3')
值,则asme为val = '1,2,3'
。
在多个列中存储多个值是一个坏主意,原因有很多:
适当的解决方案是一个单独的表,称为联结表。
有时候,a,我们会陷入别人的错误设计决定中。
如果是这样,您可以使用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()
以正确的格式获取字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.