嵌套的select mysql操作数应该包含1列

时间:2017-10-19 08:50:57

标签: mysql select nested

----------------------------
| 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列"

有人可以帮我解决这个问题

非常感谢

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);