【发布时间】:2022-06-19 21:51:06
【问题描述】:
我有两个相关的 JSON 列引用了多个表。
我需要匹配每个结果排列。
采取:
writers:
| id | name | supervising (JSON) | projects (JSON) |
|:-- |:-----| :-------------------| :-----------------|
| 1 | John | ["3","4","5","6"] | null |
| 2 | Bill | ["7","8","9","10"] | null |
| 3 | Andy | null | ["1","2"] |
| 4 | Hank | null | ["3","4","5"] |
| 5 | Alex | null | ["6","7","8"] |
| 6 | Joe | null | ["9","10"] |
| 7 | Ken | null | ["11","12","13"] |
| 8 | Zach | null | ["14","15","16"] |
| 9 | Walt | null | ["17","18"] |
| 10 | Mike | null | ["19","20","21"] |
-
writers.supervising是一个 JSON 对象,引用writers.id- 约翰监督安迪、汉克、亚历克斯和乔
- Bill 监督 Ken、Zach、Walt 和 Mike
-
writers.projects是一个 JSON 对象,引用projects.id- 安迪负责波士顿和芝加哥
- 汉克负责思科、西雅图和北区
- 等等
...约翰和比尔不写;他们监督writers.id 在writers.supervising JSON 中列出的作者。
writers 有papers 他们写...
projects:
| id | title |
|:-- |:---------|
| 1 | Boston |
| 2 | Chicago |
| 3 | Cisco |
| 4 | Seattle |
| 5 | North |
| 6 | West |
| 7 | Miami |
| 8 | York |
| 9 | Tainan |
| 10 | Seoul |
| 11 | South |
| 12 | Tokyo |
| 13 | Carlisle |
| 14 | Fugging |
| 15 | Turkey |
| 16 | Paris |
| 17 | Midguard |
| 18 | Fugging |
| 19 | Madrid |
| 20 | Salvador |
| 21 | Everett |
我需要与主管和论文一起工作:
- 获取 John 监督下作者的所有
projects.id列表。 - 检查是否:
- John (
writers.id=1) 正在监督“Carlisle”(projects.id=13) 项目(0 行) - Bill (
writers.id=2) 正在监督“Carlisle”(projects.id=13) 项目(1 行)
我需要什么:
我需要类似...
- 获取 John 监督下的作者的所有
projects.id列表 (writers.id=1)。
SELECT p.id, p.title FROM projects p
JOIN writers w
WHERE JSON_CONTAINS(writer s ON s.supervising
JSON_CONTAINS(w.projects)
)
AND s.id = '1';
想要的结果:
| 1 | Boston |
| 2 | Chicago |
| 3 | Cisco |
| 4 | Seattle |
| 5 | North |
| 6 | West |
| 7 | Miami |
| 8 | York |
| 9 | Tainan |
| 10 | Seoul |
- 检查 John (
id1) 是否监督 Carlisle (id13)
SELECT id FROM projects p
WHERE writer s JSON_CONTAINS(writer w ON s.supervising
JSON_CONTAINS("13" ON p.id)
)
AND s.id = '1';
想要的结果:0 rows
我认为两者都不对。但是,我知道我正在查看两个 JSON 对象的排列。
【问题讨论】:
-
意图是Markdown table吗?这在a meta question 中用作示例。
标签: sql json database join mariadb