【发布时间】:2017-10-15 14:56:47
【问题描述】:
我有两张桌子:
Bouquets
+----+------------+
| id | bouquet |
+----+------------+
| 1 | Package #1 |
| 2 | Package #2 |
| 3 | Package #3 |
| 4 | Package #4 |
| 5 | Package #5 |
+----+------------+
和
Prices
+----+----------+-------------------------------------------------------------------+
| id | reseller | price
+----+----------+-------------------------------------------------------------------+
| 1 | 1 | {"1": "1.11", "2": "0.00", "3": "0.00", "4": "4.44", "5": "5.55"} |
+----+----------+-------------------------------------------------------------------+
我需要获取价格值不是“0.00”的花束名称...所以我尝试 LEFT JOIN 在价格上加入花束.id 但我不知道怎么做?
我需要得到这个:
+----+------------+
| id | bouquet |
+----+------------+
| 1 | Package #1 |
| 4 | Package #4 |
| 5 | Package #5 |
+----+------------+
这是我的尝试,但我得到的是空结果:
SELECT b.id, b.bouquet FROM bouquets b
LEFT JOIN prices p ON JSON_CONTAINS(p.price, CAST(b.id as JSON), '$') != "0.00"
WHERE p.reseller=1;
【问题讨论】:
-
JSON_CONTAINS 不会遍历所有键来寻找“0.0”的值。您可以对每个键执行类似 test JSON_CONTAINS(price,'{"2" : "0.00"}') FROM price 的操作。在这种情况下,您可能应该考虑使用关系模型来轻松操作,而不是将所有内容都塞入 JSON 列
-
好的,您能否发布在 p.price id 上 LEFT JOIN b.id 的示例代码?例如 b.id = 1 ON p.price = "1" 并读取 "1" = "1.11" 的值,这样我就可以做 > "0.00"