我有一个JSON字段,其中包含以下数据:
[{"low": 57.07, "rsi": 0.0, "date": 1675935000000, "high": 57.07, "open": 57.07, "close": 57.07, "ema_7": 0.0, "ema_21": 0.0, "symbol": "ACPL", "volume": 0, "SUPERT_10_1_0": 0.0, "SUPERTd_10_1_0": 1, "SUPERTl_10_1_0": 0.0, "SUPERTs_10_1_0": 0.0}, {"low": 57.0, "rsi": 0.0, "date": 1675935900000, "high": 58.49, "open": 57.07, "close": 58.4, "ema_7": 0.0, "ema_21": 0.0, "symbol": "ACPL", "volume": 2500, "SUPERT_10_1_0": 0.0, "SUPERTd_10_1_0": 1, "SUPERTl_10_1_0": 0.0, "SUPERTs_10_1_0": 0.0}, {"low": 57.7, "rsi": 0.0, "date": 1675936800000, "high": 58.5, "open": 58.4, "close": 58.49, "ema_7": 0.0, "ema_21": 0.0, "symbol": "ACPL", "volume": 27000, "SUPERT_10_1_0": 0.0, "SUPERTd_10_1_0": 1, "SUPERTl_10_1_0": 0.0, "SUPERTs_10_1_0": 0.0}, {"low": 58.15, "rsi": 0.0, "date": 1675937700000, "high": 59.5, "open": 58.5, "close": 59.5, "ema_7": 0.0, "ema_21": 0.0, "symbol": "ACPL", "volume": 41000, "SUPERT_10_1_0": 0.0, "SUPERTd_10_1_0": 1, "SUPERTl_10_1_0": 0.0, "SUPERTs_10_1_0": 0.0}, {"low": 59.0, "rsi": 0.0, "date": 1675938600000, "high": 59.5, "open": 59.5, "close": 59.0, "ema_7": 0.0, "ema_21": 0.0, "symbol": "ACPL", "volume": 2500, "SUPERT_10_1_0": 0.0, "SUPERTd_10_1_0": 1, "SUPERTl_10_1_0": 0.0, "SUPERTs_10_1_0": 0.0}]
下面的查询非常适合我:
SELECT indicators_15.symbol,indicators_15.open,indicators_15.close
FROM indicators_15,
JSON_TABLE(data, '$[*]' COLUMNS (
close DOUBLE PATH '$.close',
open DOUBLE PATH '$.open')
) indicators_15;
但是我的主机名称堆使用的是旧版本的MariaDB,所以它失败了。我怎样才能找到一个等效的非JSON_TABLE版本呢?
以下是所需的输出:
1条答案
按热度按时间ecfdbz9o1#
要在旧版本的MariaDB中执行此操作,您需要一个数字表。
根据需要插入更多的数字,最多可以插入JSON数组的最大长度。
然后可以使用这些数字从JSON数组中提取第 n 个条目。
Dbfiddle using MariaDB 10.5.
如果你不明白,请告诉我,我会尽力进一步解释。
这确实说明了在关系数据库中使用JSON是一个多么糟糕的主意,在您的示例中没有理由使用JSON,因为每个数组条目都有相同的字段。如果无法预测字段,请使用JSON。如果每个记录中的字段都相同,请使用普通的行和列。在不需要JSON的地方--开发人员无法'如果不知道如何使用它,或者如果您被迫使用对JSON函数没有足够支持的旧版本软件,则只会增加开发时间,从而增加开发成本,从而损害您的软件项目。