-1

我有一张桌子,叫做带列的房间

NumberOfRoom | InBuilding | NameOfRoom
22           | D          | D22
54           | B          | B54
51           | E          | E51

我想将 numberOfRoom 与 InBuilding 连接起来,因此结果将是 NameOfRoom

该表已经创建,我想在该表中插入数据,除了我的问题是当我插入带有 concat 需求的值时,有一个错误告诉我该值不能为空

insert into Rooms (NumberOfRoom , InBuilding , NameOfRoom) 
      values (22, 'D', (select concat (NumberOfRoom , InBuilding) as NameOfRoom
                        from Rooms)
             );

结果应如下所示:22D 或 D22(顺序无关紧要)。

编辑:所有列也是强制性的,因此所有列都不能为 NULL。该表可以包含多于三列,例如列 nameOfRoom 之后会有另一列,例如列容量

NumberOfRoom | InBuilding | NameOfRoom| capacity
22           | D          | D22       | 10
54           | B          | B54       | 4

是否有解决方案可以将这两列与另一个命令合并?

4

2 回答 2

1

您可以使用virtual column以下概念:

create table rooms (
numberofroom number,
inbuilding varchar2(100),
nameofroom generated always as (inbuilding||numberofroom)
);

Db<>小提琴演示

干杯!!

于 2020-01-02T16:15:27.867 回答
1

您可以使用INSERT INTO . . SELECT没有 的语句VALUES

INSERT INTO Rooms (NumberOfRoom , InBuilding , NameOfRoom) 
    SELECT 22, 'D', CONCAT(NumberOfRoom, InBuilding) AS NameOfRoom 
    FROM Rooms;

您还可以使其动态:

SELECT NumberOfRoom, InBuilding, CONCAT(NumberOfRoom, InBuilding) AS NameOfRoom 
FROM Rooms;

但是,在再次阅读您的整个问题后,我发现您可能需要UPDATE而不是INSERT如果需要,那么您可以这样做:

UPDATE Rooms 
    SET NameOfRoom = CONCAT(NumberOfRoom, InBuilding)
于 2020-01-02T14:46:26.533 回答