Как поместить результат запроса или объединить в одно поле с чистым 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 и другие имена предназначены только для примера:)

Спасибо

С уважением

0 ответов

Другие вопросы по тегам