Как поместить результат запроса или объединить в одно поле с чистым sql
Для каждой записи таблицы я должен найти / проверить эту запись во второй таблице и на основе условия подстроки вернуть результаты в одно поле, разделенное разделителем, если их больше одного.
table2-> someRef всегда начинаются с двух символов + что-то еще, например, два числа до 14 или какая-то строка
функция GetMeResult(param_ID) работает, но очень медленно, так как при использовании курсора
Было бы здорово, если бы это можно было сделать с помощью некоторого соединения, подзапроса или конкатенации и т. Д.
Примеры таблиц:
Table1
------------------------
ID Field1 Field2
-------------------------
100 text1 text2
Table2
=======================================
table2_ID, someCode, someRef
---------------------------------------
100 110 SB
100 222 SB1
100 150 SB14
100 200 PB9
Function GetMeResult(param_ID)
BEGIN
DECLARE resultSomeCode VARCHAR(100);
DECLARE tmpSomeCode VARCHAR(4);
DECLARE delimeter VARCHAR(2);
DECLARE tmpCur CURSOR FOR Stmt;
set delimeter =', ';
PREPARE Stmt FROM 'SELECT someCode FROM Table2
WHERE table2_ID=? and substring(table2.someRef, 3, 2) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''10'',''11'',''12'',''13'',''14'')';
OPEN tmpCur USING param_ID;
FETCH FIRST FROM tmpCur('someCode') INTO resultSomeCode ;
WHILE NOT EOF(tmpCur) DO
if length(tmpSomeCode)>0 then
set resultSomeCode = resultSomeCode + delimeter + tmpSomeCode;
end if;
FETCH NEXT FROM tmpCur('someCode') INTO tmpSomeCode;
END WHILE;
CLOSE tmpCur;
RETURN resultSomeCode;
END
ПРИМЕНЕНИЕ:
SELECT ID, Field1, Field2, GetMeResult(ID) as SomeNameForField from Table1
Result should be like
======================
ID Field1 Field2 SomeNameForField
-------------------------------------
100, text1, text2, '222, 150, 200'
Поле PS и другие имена предназначены только для примера:)
Спасибо
С уважением