У меня есть 2 таблицы, как показано ниже, и в настоящее время я пишу функцию, которая возвращает JSON на основе этих таблиц.Нужна помощь в запросе этого.
TABLE1
Id ReqMode RespMode Count TabName
1001 R T 5000 TAB3
1002 R Y 10000 TAB4
1003 R T 3000 TAB6
1004 R T 5000 TAB5
1005 R Y 6000 TAB2
TABLE2
TabName CMeth CDate UMeth UDate DMeth DDate ParentTab
TAB1 F A1 F L1 C
TAB2 P C C TAB1
TAB3 P C C TAB2
TAB4 F B5 C C
TAB5 P C C TAB4
TAB6 C C C
JSON Формат:
{
"d":{
"Id":"1001",
"ReqMode":"R",
"RespMode":"T",
"Count":5000,
"TabName":"TAB3",
"DELTA":[
{
"Tabname":"TAB3",
"CMeth":"P",
"CDate":"",
"UMeth":"C",
"UDate":"",
"DMeth":"C",
"DDate":"",
"ParentTab":"TAB2"
},
{
"Tabname":"TAB2",
"CMeth":"P",
"CDate":"",
"UMeth":"C",
"UDate":"",
"DMeth":"C",
"DDate":"",
"ParentTab":"TAB1"
},
{
"Tabname":"TAB1",
"CMeth":"F",
"CDate":"A1",
"UMeth":"F",
"UDate":"L1",
"DMeth":"",
"DDate":"C",
"ParentTab":""
}
],
"MDATA":[ ]
}
}
Объяснение:
Если я запрашиваю 'TAB3', то мне нужно извлечь запись из TABLE1, где TabName - TAB3.Основываясь на этом имени таблицы, я проверяю его значения в TABLE2.
Мои методы имеют значения P (Parent), C (Change), F (Field)
Логика, лежащая в основе получения 3 строк здесь, в моемDELTA-часть JSON:
Для TabName TAB3, если P присутствует в любом из методов TABLE2, выберите значение ParentTab и сопоставьте его с TabName в TABLE2 и получите его детали.Это рекурсивный цикл, пока мы не встретим C или F. ни в одном из методов.
В настоящее время я теряюсь в том, как создать рекурсивный цикл на основе значений.Мой запрос на данный момент:
select Id AS 'd.Id', ReqMode AS 'd.ReqMode' ,RespMode AS 'd.RespMode',Count AS 'd.Count',TabName AS 'd.TabName'
,JSON_QUERY('[]') 'd.DELTA',JSON_QUERY('[]') 'd.MDATA'
FROM TABLE1
FOR JSON PATH
Нужна помощь в создании DELTA-части моего JSON, которая будет зависеть от TabName, которое я передаю в качестве входных данных для функции.
Заранее спасибо.