Как объединить несколько столбцов JSON в Sqlite - PullRequest
0 голосов
/ 28 ноября 2018

Я ищу синтаксис Sqlite для объединения нескольких столбцов JSON в одной таблице.Я создаю таблицу как: -

SQL = "CREATE TABLE BranchStock (branch VARCHAR, oldstock JSON, newstock JSON)"
....

Затем я вставляю несколько элементов, таких как: -

INSERT INTO BranchStock VALUES('Melbourne','[{"catnumber":"ABC123","instock":5},{"catnumber":"BCD321","instock":3}]','[{"catnumber":"ABC123","instock":1},{"catnumber":"BCD321","instock":5}]');
INSERT INTO BranchStock VALUES('Sydney','[{"catnumber":"ABC123","instock":7},{"catnumber":"XYZ567","instock":0}]','[{"catnumber":"ABC123","instock":5},{"catnumber":"XYZ567","instock":3}]');
....

Теперь я ищу поиск sql, чтобы перечислить, какие ветви имеют номер по каталогу= 'ABC123' газетная бумага или старая бумага, и количество товара на складе.Возможно, что-то вроде этого: -

SELECT * FROM BranchStock 
   JOIN json_each(oldstock) ON json_valid(oldstock)
   JOIN json_each(newstock) ON json_valid(newstock)
   WHERE json_extract(value, '$.name')='ABC123');

Вышеприведенное работает для одного JOIN, но при реализации второго JOIN я получаю синтаксическую ошибку.

Кто-нибудь знает правильный синтаксис?Заранее спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не указали конкретную ошибку "синтаксиса", поэтому я дал ей повод.

Этот SQL-код дает синтаксическую ошибку в последнем ) в предложении WHERE.Как только это исправлено, он жалуется на неоднозначное имя столбца, которое можно исправить с помощью псевдонима json_each s.Есть еще жалобы, но это итеративный процесс.

Я заставил (свою интерпретацию) это работать, и это было весело!Так что продолжайте.

СОВЕТ: Я изменил (оба) объединения следующим образом:

LEFT JOIN json_each(oldstock) os ON json_valid(oldstock) and json_extract(os.value,'$.catnumber') = 'ABC123'

[ Я не буду спорить с комментарием @ Shawn, но я использовал этот подход, и он работал для меняи до сих пор сохранил много рефакторинга! ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...