[英]Create a new table in Oracle SQL with data from another table
表:出售
user date_sold item price
Ram ‘2018-01-01’ ABDS21 24
Roze ‘2018-01-02’ ASAS31 100
我必须基于上面给出的Sold
表创建一个新表,该表具有一个值为Boolean的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
您写的查询表明还有另一个表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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.