SQL JOIN, где значение tab1.colA находится в списке JSON tab2.colB - PullRequest
0 голосов
/ 16 мая 2018

У меня есть несколько таблиц: products, transactions, styles. SQL-запрос объединяет products и styles в одну таблицу, которая содержит всю информацию, которая мне технически необходима. Однако мне нужно отсортировать эту информацию по timestamp, когда это product было приобретено. По этой причине мне нужно объединить transactions с выводом предыдущего объединения:

Сделки

| id | timestamp           | productIDs     |
|----|---------------------|----------------|
| 0  | 2014-08-04 07:56:54 | ["ID1", "ID2"] |
| 1  | 2014-08-04 07:56:57 | ["ID3", "ID4"] |

Товаров + стили присоединились

| productID | styleID | ... |
|-----------|---------|-----|
| ID1       | aaa     | ... |
| ID2       | bbb     | ... |
| ID3       | ccc     | ... |
| ID4       | ddd     | ... |

Что я ищу:

| productID | styleID | timestamp           | ... |
|-----------|---------|---------------------|-----|
| ID1       | aaa     | 2014-08-04 07:56:54 | ... |
| ID2       | bbb     | 2014-08-04 07:56:54 | ... |
| ID3       | ccc     | 2014-08-04 07:56:57 | ... |
| ID4       | ddd     | 2014-08-04 07:56:57 | ... |

Для каждой строки из products + styles добавляется временная метка из transactions, где productID присутствует в productIDs структуре JSON.

Как мне выполнить такое объединение?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

@Rohit.007 Ваша таблица транзакций не нормализована.В идеале должно быть несколько строк для каждой уникальной записи.

В итоге я создал отдельную таблицу, которая содержит числовой индекс, идентификатор транзакции и идентификатор продукта.Он содержит отдельные строки для каждого продукта, купленного в рамках транзакции.

0 голосов
/ 16 мая 2018

Попробуйте добавить что-то вроде этого в предложение where

AND exists(select value from openjson(productids) p where p.value in (select productid from products))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...