2017-08-11 80 views
0

我想在couchbase中做一個簡單的LEFT JOIN表。這是我有:如何在N1QL couchbase中執行LEFT JOIN?

SELECT 
    a.*, 
    b.id, 
    b.name 
    FROM my_table AS a LEFT JOIN my_table AS b 
    ON KEYS a.pid 
    WHERE a.id='abc' 

但由於某種原因,我得到的結果是不包括在右側表的字段。任何人都可以幫助我實現類似於我們在關係數據庫SQL中可以做到的事情嗎?

SELECT 
    a.*, 
    b.id, 
    b.name 
    FROM my_table AS a LEFT JOIN my_table AS b 
    ON a.pid=b.id 
    WHERE a.id='abc' 

謝謝!

回答

0

如果JOIN投影爲在SQL中(NOSQL)JSON MISSING VS NULL沒有符合右側(即,它給了LEFT端文檔延伸右側爲缺失)如果文檔B匹配

SELECT 
    a.*, 
    (CASE WHEN b IS MISSING THEN NULL ELSE b.id END) AS id, 
    (CASE WHEN b IS MISSING THEN NULL ELSE b.name END) AS name 
    FROM my_table AS a LEFT JOIN my_table AS b 
    ON KEYS a.pid 
    WHERE a.id='abc'; 

和b.name是MISSING,你仍然會收到MISSING。如果你需要null,試試這個。

SELECT 
    a.*, 
    (CASE WHEN b.id IS MISSING THEN NULL ELSE b.id END) AS id, 
    (CASE WHEN b.name IS MISSING THEN NULL ELSE b.name END) AS name 
    FROM my_table AS a LEFT JOIN my_table AS b 
    ON KEYS a.pid 
    WHERE a.id='abc'; 

SELECT 
a.*, 
IFMISSING(b.id,NULL) AS id, 
IFMISSING(b.name,NULL) AS name 
FROM my_table AS a LEFT JOIN my_table AS b 
ON KEYS a.pid 
WHERE a.id='abc';