Как сделать LEFT JOIN в N1QL couchbase?
Я пытаюсь сделать простое левое соединение таблицы в диване. Вот что у меня есть:
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'
Спасибо!
1 ответ
Если ничто не соответствует правой стороне JOIN, спроецированной как MISSING в (NOSQL), JSON против NULL в SQL (т. Е. Это дает ЛЕВОЙ стороне документа расширение правой стороны как MISSING)
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 совпадает, а b.name - MISSING, вы все равно получаете MISSING. Если вам нужно ноль, попробуйте это.
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';