select select 内的语句
select statement within select
我的 user
table 中有一个 manage
列,其中包含一个字符串 '2','3','4','5','6'
,这些数字引用了用户的 user.id
"manages".
声明:
SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)
问题: 为什么我的语句没有返回任何内容?
您可以创建一个新的 table user_manages
,其中包含两列:manager_id
和 user_id
。在 table 中为经理管理的每个用户创建一条新记录。然后你可以在两个 table 之间建立连接。
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')
就是 val = '1,2,3'
.
在一个列中存储多个值不是一个好主意,原因有很多:
- MySQL的字符串函数不是特别强大
- 整数应存储为数字,而不是字符串。
- 一列只能包含一个值。
- 应正确定义外键关系。
- 使用 "list-in-a-string" 列的查询不能使用索引。
正确的解决方案是一个单独的 table,称为结点 table。
有时候,唉,我们会被其他人糟糕的设计决定所困。
如果是这样,你可以使用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()
来获取格式正确的字符串。
我的 user
table 中有一个 manage
列,其中包含一个字符串 '2','3','4','5','6'
,这些数字引用了用户的 user.id
"manages".
声明:
SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)
问题: 为什么我的语句没有返回任何内容?
您可以创建一个新的 table user_manages
,其中包含两列:manager_id
和 user_id
。在 table 中为经理管理的每个用户创建一条新记录。然后你可以在两个 table 之间建立连接。
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')
就是 val = '1,2,3'
.
在一个列中存储多个值不是一个好主意,原因有很多:
- MySQL的字符串函数不是特别强大
- 整数应存储为数字,而不是字符串。
- 一列只能包含一个值。
- 应正确定义外键关系。
- 使用 "list-in-a-string" 列的查询不能使用索引。
正确的解决方案是一个单独的 table,称为结点 table。
有时候,唉,我们会被其他人糟糕的设计决定所困。
如果是这样,你可以使用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()
来获取格式正确的字符串。