Как сделать 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';
Другие вопросы по тегам