无法在适当条件下添加虚拟列
我的任务是使用sql创建一个表示ER图的数据库。我有两张表,我相信它们是针对我必须问的问题的:
- 表1:“座位”和
- 表2:“行”
我想写SQL的问题是:
添加虚拟列以计算每一行中的座位总数。
所述表格的创建如下:
CREATE TABLE "row"(
"rowID" NUMBER(5) PRIMARY KEY,
numbers NUMBER(5) NOT NULL,
seats NUMBER(5) NOT NULL,
auditoriumID NUMBER(5),
CONSTRAINT row_aud_fk FOREIGN KEY(auditoriumID) REFERENCES auditorium(auditoriumID));
CREATE SEQUENCE seq_row
START WITH 10
INCREMENT BY 1
MAXVALUE 100
NOCYCLE
CACHE 5;
CREATE TABLE seat(
seatID NUMBER(5) PRIMARY KEY,
"rowID" NUMBER(5),
numbers NUMBER(5) NOT NULL,
"name" NVARCHAR2(26) NOT NULL,
typeID NUMBER(5),
CONSTRAINT seat_row_fk FOREIGN KEY("rowID") REFERENCES "row"("rowID"),
CONSTRAINT seatType_fk FOREIGN KEY(typeID) REFERENCES "seatType"("typeID"));
CREATE SEQUENCE seq_singularseat
START WITH 1000
INCREMENT BY 1
MAXVALUE 10000
NOCYCLE
CACHE 5;
主要的障碍是我必须使用算术表达式,不能使用子查询(或者至少它对我不起作用)
PS:由于没有限制,这应该有表,你可以尝试行以及。座位对我来说似乎是一个更可能的选择。
举一个我尝试过的例子:
ALTER TABLE seat
ADD total_seats_per_row NUMBER GENERATED ALWAYS AS
(SELECT COUNT(*) FROM seat s WHERE s.rowID = seat.rowID) VIRTUAL;
1条答案
按热度按时间tyu7yeag1#
我简化了你的例子(没有外键,删除了双引号(我只是讨厌它们)。
样本数据:
由于对虚列的某些限制(不能引用其他表中的列),我将创建一个确定性函数(必须是;否则,这将不起作用):
虚拟列:
测试:
这是一个普通的查询返回的内容:
包含虚列的表返回什么?同样的数据:
我们在第二排再加一个座位怎么样?
看看有没有用