Создать новую таблицу в Oracle SQL с данными из другой таблицы

Стол: продан

user        date_sold       item        price
Ram         ‘2018-01-01’    ABDS21      24
Roze        ‘2018-01-02’    ASAS31      100

Я должен создать новую таблицу на основе Sold приведенная выше таблица с колонкой sold_already это логическое значение со значением

  • ‘true’ если они продали этот предмет раньше
  • ‘false’ если они впервые продают этот предмет.

Это мой запрос, но он не работает:

CREATE table sold_boughtsign 
    ( user varchar, 
      date_sold date, 
      item varchar, 
      price number, 
      bought_before boolean);

INSERT INTO sold_boughtsign 
  (user, date_sold,item, price) 
SELECT user, date_sold,item, price
FROM sold 
IF(bought_before IS NULL, FALSE, TRUE) 
From User INNER JOIN items ON user=item

1 ответ

Запрос, который вы написали, предполагает, что есть еще одна таблица, items, но мы не знаем, как это выглядит или что в нем содержится - поэтому я использую свое воображение.

Образцы таблиц и данных (обратите внимание, что вы не можете использовать user как имя столбца; В Oracle есть функция, которая возвращает текущего зарегистрированного пользователя, поэтому я ставлю перед ней префикс "c_"):

SQL> create table items (item varchar2 (20));

Table created.

SQL> create table sold
  2  (
  3     c_user      varchar2 (20),
  4     date_sold   date,
  5     item        varchar2 (20),
  6     price       number
  7  );

Table created.

SQL>
SQL> insert into items
  2    select 'ABDS21' from dual union
  3    select 'ASAS31' from dual union
  4    select 'XXX'    from dual;

3 rows created.

SQL> insert into sold
  2    select 'Ram' , date '2018-01-01', 'ABDS21', 24  from dual union
  3    select 'Roze', date '2018-01-02', 'ASAS31', 100 from dual;

2 rows created.

SQL>

Новая таблица: поскольку в SQL нет логического типа данных, мы должны выбрать, как преодолеть это ограничение. Например, вы можете использовать NUMBER Тип данных и хранить 0 (для false) и 1 (для true). Я выбрал VARCHAR2 введите тип данных "Y" (как "да, предмет был продан") и "N" (нет, он еще не был продан). Кроме того, я создал проверочное ограничение, чтобы пользователи не могли вводить что-либо еще в этот столбец.

SQL> create table sold_boughtsign
  2  (
  3     c_user          varchar2 (20),
  4     date_sold       date,
  5     item            varchar2 (20),
  6     price           number,
  7     bought_before   varchar2 (1) check (bought_before in ('Y', 'N'))
  8  );

Table created.

SQL>

Наконец, давайте заполним эту таблицу:

SQL> insert into sold_boughtsign
  2    (c_user, date_sold, item, price, bought_before)
  3  select s.c_user, s.date_sold, i.item, s.price,
  4    decode(s.date_sold, null, 'N', 'Y') bought_before
  5  from items i left join sold s on s.item = i.item;

3 rows created.

SQL> select * from sold_boughtsign;

C_USER               DATE_SOLD  ITEM                      PRICE B
-------------------- ---------- -------------------- ---------- -
Ram                  2018-01-01 ABDS21                       24 Y
Roze                 2018-01-02 ASAS31                      100 Y
                                XXX                             N

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