Oracle: Как проверить, существует ли значение в столбце типа коллекции? - PullRequest
0 голосов
/ 29 апреля 2019

Допустим, у меня есть две таблицы,

Таблица A

PK       SIZE  
89733     5 
83644     3  
87351     8
84423     11

Таблица B

 ID      Table_A_PK  
  1     89733,83644,86455   
  2     87351,89542  
  3     84132
  4     84566,84646

Примечание: Столбец Table_A_PK isтипа коллекции, поэтому он имеет много значений.

Я хочу выбрать значение размер столбец Таблица A , если столбец PK значениевыходы в Таблица B столбец Table_A_PK

Для этого я попробовал это, но это не работает и выдает ошибку

Select {a.SIZE} 
from {A as a} where {a.PK}  
in ({{ SELECT {b.Table_A_PK} FROM {B as b}

ActualРезультат: ORA-01722: неверный номер

Ожидаемый результат

        SIZE  
         5  
         3  
         8

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Во-первых, типы коллекций устарели. Если вы используете их по своему выбору, предпочитайте отношения. С ними гораздо проще работать.

Я понял это однажды с оператором LIKE:

... WHERE Table_A_PK LIKE '%MYPK%'

Однако это НЕ лучшая практика.

Возможно, вы сможете использовать Concat-Funktion, чтобы объединить знаки% с PK в исходной таблице для объединения. Однако я не пробовал это.

SELECT {a.SIZE} 
FROM {A AS a JOIN B AS b 
ON {b.TABLE_A_PK} LIKE Concat('%', {a.pk}, '%') }
0 голосов
/ 13 мая 2019

Я бы предложил использовать Relation вместо CollectionType. Если вы не можете изменить itemType, вы можете искать, используя LIKE operator

SELECT {a.SIZE}
FROM
{
   B AS b JOIN A AS a
   ON {b.TABLE_A_PK} LIKE CONCAT( '%', CONCAT( {a.PK} , '%' ) )
}
...