MySQLバージョン5.7.12(マニュアルのセクション13.16)でネイティブJSON関数(PHPなどはありません)のみを使用しています。サブオブジェクトを含むリレーショナルテーブルからJSONドキュメントを生成するクエリを作成しようとしています。次の例を考える:mysqlネイティブjson関数を使用して入れ子になったjsonオブジェクトを生成するにはどうすればよいですか?
CREATE TABLE `parent_table` (
`id` int(11) NOT NULL,
`desc` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `child_table` (
`id` int(11) NOT NULL,
`parent_id` int(11) NOT NULL,
`desc` varchar(20) NOT NULL,
PRIMARY KEY (`id`,`parent_id`)
);
insert `parent_table` values (1,'parent row 1');
insert `child_table` values (1,1,'child row 1');
insert `child_table` values (2,1,'child row 2');
私はこのようになりますJSONドキュメントを生成しようとしています:
[{
"id" : 1,
"desc" : "parent row 1",
"child_objects" : [{
"id" : 1,
"parent_id" : 1,
"desc" : "child row 1"
}, {
"id" : 2,
"parent_id" : 1,
"desc" : "child row 2"
}
]
}]
私は、MySQLに新しいですから、ネストされたJSONオブジェクトを生成するためのSQLパターンがあると疑われます1対多の関係だが、私はそれを見つけるのが難しい。
次作品(私はともっとよく知っている)は、Microsoft SQLでは:私は次のようにMySQLの等価を書き込もうとし
select
[p].[id]
,[p].[desc]
,(select * from [dbo].[child_table] where [parent_id] = [p].[id] for json auto) AS [child_objects]
from [dbo].[parent_table] [p]
for json path
:
select json_object(
'id',p.id
,'desc',p.`desc`
,'child_objects',(select json_object('id',id,'parent_id',parent_id,'desc',`desc`)
from child_table where parent_id = p.id)
)
from parent_table p;
select json_object(
'id',p.id
,'desc',p.`desc`
,'child_objects',json_array((select json_object('id',id,'parent_id',parent_id,'desc',`desc`)
from child_table where parent_id = p.id))
)
from parent_table p
どちらの試みが失敗すると次のエラーが発生しました:
Error Code: 1242. Subquery returns more than 1 row
こんにちは、私はjson_objectこの関数を使用することができません。 #1305 - 機能json_objectが存在しません。何をすべきか??? – Sandeep
使用しているMysqlのバージョンを確認してください。古いバージョンはjson_objectをサポートしていません –
現在のバージョンは5.6です – Sandeep