postgresql 查询插入的行比预期的多(四行而不是一行)

jc3wubiy  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

这是一个简单的一个明显的错误,但我找不到解决办法
我有这样的疑问:

INSERT INTO Movimiento (ExpedienteId,FechaIngreso,SectorOrigen,SectorDestino,FechaEnvio) 
SELECT 25,'2022-11-15 00:00:00.000',2,3,'2022-11-19 00:00:00.000' 
FROM Expediente e 
 left JOIN Movimiento m 
  ON e.ExpedienteId = m.ExpedienteId 
WHERE m.ExpedienteId IS NULL

查询必须在Movimiento中插入一行,但插入的是相同的4行

select * from Movimiento where ExpedienteId = 25

和结果:

MovimientoId    ExpedienteId    FechaIngreso    SectorOrigen    SectorDestino   FechaEnvio   
1271    25  2022-11-15 00:00:00.000 2   3   2022-11-19 00:00:00.000    
1272    25  2022-11-15 00:00:00.000 2   3   2022-11-19 00:00:00.000  
1273    25  2022-11-15 00:00:00.000 2   3   2022-11-19 00:00:00.000  
1274    25  2022-11-15 00:00:00.000 2   3   2022-11-19 00:00:00.000
k97glaaz

k97glaaz1#

对于查询返回的每一行,您都要插入相同的常量值。Expediente中有4个条目,但Movimiento中没有匹配项,因此要插入4次常量。
你可以做

INSERT INTO Movimiento (ExpedienteId,FechaIngreso,SectorOrigen,SectorDestino,FechaEnvio) 
SELECT 25,'2022-11-15 00:00:00.000',2,3,'2022-11-19 00:00:00.000'

如果目标是插入“缺少的”条目,则不要使用常量25,而应使用e.ExpedienteId

INSERT INTO Movimiento (ExpedienteId,FechaIngreso,SectorOrigen,SectorDestino,FechaEnvio) 
SELECT e.ExpedienteId,'2022-11-15 00:00:00.000',2,3,'2022-11-19 00:00:00.000' 
FROM Expediente e 
 left JOIN Movimiento m 
  ON e.ExpedienteId = m.ExpedienteId 
WHERE m.ExpedienteId IS NULL

相关问题