#sql #oracle #nested-table
#sql #Oracle #вложенная таблица
Вопрос:
Я прикрепил изображение с SQL-запросами, которые упоминаются в документации Oracle по вложенным таблицам и как получить доступ к записям из таблиц. Но я не могу понять используемые там операторы SELECT. Может кто-нибудь объяснить мне фактическое значение используемого там запроса SELECT?Скриншот документации Oracle SQL по вложенным таблицам
Создайте таблицу с ВЛОЖЕННЫМ столбцом ТАБЛИЦЫ,
CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
NESTED TABLE col1 STORE AS col1_tab;
Вставка данных в таблицу,
INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));
COMMIT;
SQL-запрос, который я не смог получить,
SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2;
Результат отображается как,
ID COLUMN_VALUE
1 A
2 B
2 C
3 D
3 E
3 F
Выделено 6 строк.
Ответ №1:
Синтаксис FROM nested_table t1, TABLE(t1.col1) t2
— это старый синтаксис Oracle для ПЕРЕКРЕСТНОГО СОЕДИНЕНИЯ, вы не должны использовать его в настоящее время. Лучше написать
FROM nested_table t1
CROSS JOIN TABLE(t1.col1) t2
ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ означает, что вы объединяете каждую строку from t1
с каждой строкой from t2
. Вы должны найти много объяснений в Интернете.