2016-11-12 3 views
1

그래서 사용자 이름과 암호를 기반으로 사용자 이름 정보를 가져 오는 db에 대한 쿼리를 실행하려고합니다.하지만 둘 다 같은 테이블에 있습니다. 내가 코드를 실행하면 :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

첫 번째 쿼리에서 결과를 얻으면 간단한 String과 같을 수없는 JSON 배열이 생성됩니다. 당신이 결과를 얻을 수

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

해당 쿼리에 대한 예를 들어

:

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

나는 그것이 단순한를 얻기 위해, 원시 키워드를 사용하는 것입니다 해결하는 생각할 수있는 가장 좋은 방법 값의 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

하위 쿼리의 결과는 문자열이 아니기 때문에 하나의 필드가있는 객체라고 생각합니다. 예 : "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