MySQLテーブルAddressIdentifiers
にJSON型の列Customers
があり、データサンプルは次のようになります。
[
{
"code": "123",
"identifier": "0219d5780f6b",
"type": "BILLING",
"info": null
},
{
"code": "240",
"identifier": "c81aaf2c5a1f",
"type": "DELIVERY",
"info": null
}
]
私はクエリを使用しています:
SELECT JSON_EXTRACT(AddressIdentifiers, '$**.identifier') As Identifier, JSON_EXTRACT(AddressIdentifiers, '$**.type') As AddressType FROM Customers WHERE CustomerId = 10003;
次のような出力を取得するには:
Identifier AddressType
------------------------
0219d5780f6b BILLING
c81aaf2c5a1f DELIVERY
しかし、それはテーブルの行のような出力を与えず、代わりに連結された値を与えます。 (上記のように)行のようなJSON配列から出力を取得するにはどうすればよいですか?お知らせ下さい。
MySQLバージョン5.7.17
を使用しています。
おかげで、
プラバット
編集-1:Customers
をキーとして持つAddress
テーブル(列:Id、識別子、住所、都市、ピンコード)とこのidentifier
テーブルを結合すると、各住所の行としてこれらの値をプルできると思いますか?
したがって、出力は次のようになります。
Identifier AddressType Address City
-----------------------------------------
0219d5780f6b BILLING Address-1 Hyderabad
c81aaf2c5a1f DELIVERY Address-2 Delhi
私はMySQL 5.7にこのソリューションを用意しています。手動で作業を行う必要があります。 MySQL 8.0+の場合、単純に JSON_TABLE
SELECT
JSON_EXTRACT(C.AddressIdentifiers, CONCAT('$[', Numbers.N - 1, '].Identifier')) AS Identifier,
JSON_EXTRACT(C.AddressIdentifiers, CONCAT('$[', Numbers.N - 1, '].AddressType')) AS AddressType,
FROM
(
SELECT @row := @row + 1 AS N FROM
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T2,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T1,
(SELECT @row:=0) T0
) Numbers -- Natural numbers from 1 to 100
INNER JOIN Customers C ON Numbers.N < JSON_LENGTH(C.AddressIdentifiers)