mysql - 如何使用SQL检查一个表中存在的json值数组是否存在于另一个表中?
问题描述
我有两张看起来像这样的桌子..
篮子
ID | 大批 |
---|---|
1 | ["Apple", "Mango", "Pineapple"] |
2 | ["Mango", "Pineapple"] |
3 | ["Dragonfruit"] |
库存
水果 | 数数 |
---|---|
苹果 | 100 |
芒果 | 500 |
猕猴桃 | 99 |
葡萄 | 0 |
通过 SQL 查询,我必须检查第一个表的数组中有多少水果存在于第二个表中。
例如, out of ["Apple", "Mango", "Pineapple"]
onlyApple
和Mango
is 在 Stock 表中。
预期结果:
ID | 可用的 |
---|---|
1 | 2 |
2 | 1 |
3 | 0 |
PS。这是我试图解决的实际问题的简化,我的主要查询是如何将 JSON 对象数组与其他表进行匹配。水果/库存示例仅用于解释问题。
解决方案
SELECT Baskets.id, COUNT(Stock.Fruit) available
FROM Baskets
LEFT JOIN Stock ON JSON_SEARCH(Baskets.Array, 'one', Stock.Fruit) IS NOT NULL
GROUP BY Baskets.id
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a0f8e8fba8851fcda508affca0201ba9
推荐阅读
- codenameone - 代号:iPad 上的选取器不再有任何按钮
- python - 数组中的一个多余元素总是留下
- javascript - vue 转义对象子作为参数
- python - 如何在不展平嵌套列表的情况下更改嵌套列表的值?
- git - git clone 后对象目录没有对象
- django - 在 HTML 呈现中未考虑 ModelChoiceField 选项
- python - 错误:无法创建临时目录“C:\Users\user\AppData\Local\Temp\conda-
\" - angular - 将Angular与JWT的spring boot连接时出现CORS错误
- azure - 使用 APEX 生成 Azure Blob SAS 令牌
- javascript - 文本溢出:悬停时省略滚动文本