所以我试图在我的数据库上运行查询,该查询将根据用户名和密码获取用户名的信息,但两者都在同一个表中。当我运行代码时:
SELECT subscriberRef
FROM csp
WHERE username = "ville" AND pass = "ppp"
我得到了正确的参考资料,即:" S:1"但是当我在WHERE子句中对它进行子查询时,这样:
SELECT *
FROM csp
WHERE META(csp).id = (SELECT subscriberRef
FROM csp as csp1
WHERE username = "ville" AND pass = "ppp")
返回[]。 为什么?????????
答案 0 :(得分:2)
当您从第一个查询获得结果时,您将获得一个JSON数组,这不能等同于一个简单的String。
例如该查询
SELECT subscriberRef
FROM webinar as w
WHERE username = "ppp" AND `password` = "vvv"
你会得到那个结果:
[
{
"subscriberRef": "person::1"
}
]
我能想到解决问题的最好方法是使用raw关键字来获取值的简单JSON数组。
SELECT raw subscriberRef
FROM webinar as w
WHERE username = "ppp" AND `password` = "vvv"
结果:
[
"person::1"
]
从这里你可以建立你的查询:
select *
from myBucket
where meta().id in (
SELECT raw subscriberRef
FROM myBucket as w
WHERE username = "ppp" AND `password` = "vvv")
现在我不会使用" ="但是"在"因为这是一个数据数组(有1个值)
答案 1 :(得分:0)
我认为这是因为子查询的结果不是字符串,而是具有一个字段的对象。例如。 “foo”与{“bar”:“foo”}不一样。
我不知道是否有解决方法(可能存在),但您是否考虑过使用JOIN转向其他方向?类似的东西:
SELECT csp.*
FROM `default` csp1
JOIN `default` csp ON KEYS csp1.subscriberRef
WHERE csp1.username = "ville" and csp1.pass = "ppp"