0
を使用して、JOIN、私は以下のようにJSON構造を有する:ネストされた配列は、Oracle 12cとを使用したJSON_TABLE
{
"class": {
"students": [{
"name": "Joe",
"rollnum": 11,
"homephone": 3211113312,
"joined_on": "2016-03-01",
"subjects": [{
"subject_id": 21,
"marks": 53
}, {
"subject_id": 23,
"marks": 43
}, {
"subject_id": 24,
"marks": 35
}, {
"subject_id": 25,
"marks": 90
}, {
"subject_id": 26,
"marks": 87
}]
}, {
"name": "Toe",
"rollnum": 12,
"homephone": 1231231122,
"joined_on": "2016-03-01",
"subjects": [{
"subject_id": 21,
"marks": 66
}, {
"subject_id": 23,
"marks": 77
}, {
"subject_id": 24,
"marks": 88
}, {
"subject_id": 25,
"marks": 90
}, {
"subject_id": 26,
"marks": 98
}]
},
{
"name": "Roe",
"rollnum": 15,
"homephone": 3332221111,
"joined_on": "2016-03-01",
"subjects": [{
"subject_id": 21,
"marks": 56
}, {
"subject_id": 23,
"marks": 57
}, {
"subject_id": 24,
"marks": 87
}, {
"subject_id": 25,
"marks": 66
}, {
"subject_id": 26,
"marks": 76
}]
}
]
}
}
クラスは複数の生徒を持っており、各学生が複数の被験者に登録されています。このデータは、JSON LOB構造としてテーブルの列に格納されています。今、SubjectIDをネストされた配列からSubjectマスターテーブルに結合しようとすると、それは機能しません。しかし、特定の科目(または他の科目)を照会しようとすると、それは完璧に正常に動作します。
以下は私が使用しているクエリです。助けてください。
SELECT sjson.name,sjson.rollnum,sm.subject_name,sjson.marks
FROM
students s,
JSON_TABLE(ss.student_json,'$.class.students[*]'
columns(
name varchar2(50) path '$.name',
rollnum number path '$.rollnum',
homephone number path '$.homephone',
joined_on varchar2 path '$.joined_on' ,
nested path '$.subjects[*]' columns(
subject_id number path '$.subject_id',
marks number path '$.marks'
)
)
)sjson,
subject_master sm
WHERE sjson.name = 'Joe'
AND sjson.subject_id = sm.subject_id;
おかげさまで、これは私が自分のクライアントの別のデータセットで試したことです。明らかに、私の結果は期待通りではありませんでした。私は協力して取り戻そうとします。私が見つけたのは、SQLエンジンがJSONネストされた列とSubject Masterテーブルの間のJOINを正しく認識できなかったことです。 – Kunal