繁体   English   中英

选择内的选择语句

[英]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_iduser_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'

在多个列中存储多个值是一个坏主意,原因有很多:

  • MySQL的字符串函数并不是特别强大。
  • 整数应存储为数字,而不是字符串。
  • 一栏只能包含一个值。
  • 外键关系应正确定义。
  • 使用“字符串列表”列的查询不能使用索引。

适当的解决方案是一个单独的表,称为联结表。

有时候,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM