----------------------------
| user | path | active |
----------------------------
| user A | A.1 | 0 |
----------------------------
| user B | A.1.1 | 1 |
----------------------------
| user C | A.1.1.1 | 1 |
----------------------------
条件:
路径就像用户树。 用户B是用户A的孩子,用户C是用户B的孩子。 如果active = 0则表示用户未激活。
我需要通过路径选择活跃且也有孩子的用户A的孩子。
现在我已经有了一个查询来选择用户A的孩子
select path from table where active = 1 and `path` like 'A.1%' and
length(`path`) - length(replace(`path`, '.', '')) = 2;
它将返回用户A的所有孩子。
现在我需要选择也有孩子的用户A的孩子。
我试图像这样使用嵌套选择
select distinct path from table where active = 1 and user_type = 1 and `path` like ((select path from acctProgress_monthly where active = 1 and user_type = 1 and `path` like 'A.1%' and
length(`path`) - length(replace(`path`, '.', '')) = 2), '%');
但它返回错误"操作数应包含1列"
有人可以帮我解决这个问题
非常感谢
答案 0 :(得分:0)
在mysql
中,当您想使用嵌套的SELECT
时,它必须返回1个值。
想象一下myNames表就像:
id |名称强>
1 | 约翰
2 | 安
如果你这样做
SELECT * FROM myTable WHERE name = (SELECT name FROM myNames);
会抛出该错误,因为(SELECT name FROM myNames)
会返回多行。
要修复它,您只需要返回1行和1列(1个值):
SELECT * FROM myTable WHERE name = (SELECT name FROM myNames WHERE id = 1);