SQL JOIN其中tab1.colA值位于tab2.colB的JSON列表中

时间:2018-05-16 17:55:23

标签: mysql sql

我有几张桌子:productstransactionsstyles。 SQL查询将productsstyles连接到一个表中,该表包含我技术上需要的所有信息。但是,我需要在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 JSON结构中存在productIDs

如何进行此类加入?

2 个答案:

答案 0 :(得分:0)

尝试在where子句中添加类似的内容

AND exists(select value from openjson(productids) p where p.value in (select productid from products))

答案 1 :(得分:0)

  

@ Rohit.007您的交易表未规范化。理想情况下,每个唯一条目应该有多行。

我最终创建了一个包含数字索引,事务ID和产品ID的单独表。 作为交易的一部分,它为每个购买的产品保留了单独的行。