选择中的select语句

时间:2016-05-03 00:29:59

标签: mysql sql subquery

我的manage表格中有user列,其中包含字符串'2','3','4','5','6',这些数字引用用户“管理”的user.id

STATMENT:

SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)

问题: 为什么我的陈述什么都没有回来?

2 个答案:

答案 0 :(得分:3)

您可以创建一个新表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

答案 1 :(得分:2)

in适用于值的列表,而不是单个字符串值。因此,如果您有这样的值val in ('1,2,3'),则为val = '1,2,3'

出于多种原因,在单个列中存储多个值是个坏主意:

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

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

有时,唉,我们很难接受其他人糟糕的设计决定。

如果是,您可以使用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()以正确的格式获取字符串。