2017-08-11 78 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';