Создание таблицы с помощью JOIN SQL

#sql #oracle #join #left-join

#sql #Oracle #Присоединиться #синтаксическая ошибка #слева-объединение

Вопрос:

Мне нужно создать новую таблицу в моей базе данных с помощью инструкции left join для двух таблиц из разных схем. Вот мой код ниже:

 CREATE TABLE NEW_TABLE
  FROM SCHEMA_1.TABLE_A X
  LEFT JOIN SCHEMA_2.TABLE_B Y
     ON X.NAME = Y.NAME 
        AND X.NUMBER = Y.NUMBER
  

Я получаю ошибку SQL:

ORA-00922: отсутствующий или недопустимый параметр
00922. 00000 — «отсутствующий или недопустимый параметр»

Комментарии:

1. Вам не хватает select .

2. Вы уверены, что хотите создать таблицу, а не представление? Казалось бы, более вероятно, что вы захотите создать представление, объединяющее две таблицы, чтобы вы могли запрашивать представление и получать актуальные данные, а не иметь устаревшую копию данных.

3. Я новичок в использовании представлений, поэтому, если я правильно понимаю, представление более динамично и обновляется по мере обновления двух родительских таблиц?

Ответ №1:

Вам не хватает as select предложения:

 CREATE TABLE NEW_TABLE
AS ( -- This was missing
    SELECT    * -- So was this
    FROM      SCHEMA_1.TABLE_A X
    LEFT JOIN SCHEMA_2.TABLE_B Y ON X.NAME = Y.NAME AND
                                    X.NUMBER = Y.NUMBER
   )
  

Комментарии:

1. SELECT * не будет работать, поскольку две таблицы совместно используют поля с одинаковыми именами.

2. Ах-ха! Спасибо.

Ответ №2:

Не используйте NUMBER в качестве имени столбца это ключевое слово oracle.

Переходя к запросу, если единственными общими столбцами в двух таблицах являются NAME , NUMBER тогда вы можете попробовать следующее

  CREATE TABLE NEW_TABLE
 AS (
SELECT    * 
FROM      SCHEMA_1.TABLE_A X
LEFT JOIN SCHEMA_2.TABLE_B Y Using(NAME,NUMBER)
)
  

Комментарии:

1. Придирки: круглые скобки вокруг select бесполезны

2. Спасибо. Ценю помощь.