Oracle SQL - 带子查询的插入返回多行

时间:2013-12-01 20:45:40

标签: sql oracle

我在尝试插入“中间表”时遇到了n-n关系的问题。

目标是关联CommuneZipCode(在法国,公社是一个城市,城市名称可以有多个ZipCode,因为有同名的公社。但不是同一个地方)

ZipCode可以处理多个城市,这是我的n-n relationShip。

所以这是我使用的请求:

INSERT INTO FR(IDCODEPOSTAL, IDCOM_SIM) 
VALUES 
('24209 CEDEX', (SELECT DISTINCT IDCOM_SIM FROM COMMUNE WHERE NCCENR='Creysse'));

但这里SELECT返回2行。我读了很多,但我没有办法解决这个问题。

1 个答案:

答案 0 :(得分:0)

我不确定您要实现的目标,但通常您会使用INSERT ... SELECT(不使用VALUES)使用单个语句插入多行:

INSERT INTO FR
  (IDCODEPOSTAL, IDCOM_SIM) 
VALUES 
 SELECT '24209 CEDEX', IDCOM_SIM 
 FROM COMMUNE 
 WHERE NCCENR='Creysse';

如果您只想插入一行,则需要确保子选择只返回一行。这通常使用聚合函数(例如max()

)来完成
INSERT INTO FR
  (
    IDCODEPOSTAL, 
    IDCOM_SIM
  ) 
VALUES 
  (
    '24209 CEDEX', 
    (SELECT max(IDCOM_SIM) FROM COMMUNE WHERE NCCENR='Creysse')
  );