WHERE 子句上的 Couchbase 子查询

Couchbase subquery on WHERE clause

所以我正在尝试 运行 我的数据库上的查询,该查询将根据用户名和密码获取用户名的信息,但两者都在同一个 table 上。当我 运行 代码时:

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

它returns[]。 为什么?????????

我想是因为子查询的结果不是字符串,而是一个只有一个字段的对象。例如。 "foo" 与 { "bar" : "foo"} 不同。

我不知道是否有解决方法(可能有),但是您是否考虑过使用 JOIN 来代替另一个方向?类似于:

SELECT csp.*
FROM `default` csp1
JOIN `default` csp ON KEYS csp1.subscriberRef
WHERE csp1.username = "ville" and csp1.pass = "ppp"

当您从第一个查询获得结果时,您会得到一个 JSON 的数组,它不能等同于一个简单的字符串。

例如该查询

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

现在我不会使用“=”,但是 "in" 因为这是一个数据数组(有 1 个值)