2016-11-12 13 views
1

私はユーザー名とパスワードに基づいてユーザー名の情報を取得するデータベースのクエリを実行しようとしていますが、両方が同じテーブルにあります。私はコードを実行すると:WHERE句のCouchbaseサブクエリ

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

それは[]を返します。 WHY ?????????

答えて

2

あなたは、単純な文字列に相当することはできませんJSONsの配列を取得最初のクエリからの結果を得ています。それを解決するために私は考えることができる最善の方法は、単純なを取得するには、生のキーワードを使用することです

[ 
    { 
    "subscriberRef": "person::1" 
    } 
] 

例えば、そのクエリ

SELECT subscriberRef 
FROM webinar as w 
WHERE username = "ppp" AND `password` = "vvv" 

のために、あなたはその結果を取得します値の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つの値を持つ)

0

サブクエリの結果は文字列ではありませんが、1つのフィールドを持つオブジェクトだと思います。例えば。 "foo"は{"bar": "foo"}と同じではありません。

周りに道があるかどうかわかりませんが(おそらくあります)、JOINを使用して別の方向に進むことを検討しましたか?ような何か:

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

これは私がやったが、私はそのような単純なクエリのためにデータベースに参加したいとは思わなかった。 Couchbaseは不必要な節を提供し、それを調べます。 – lest96