在插入过程中联接表以获得唯一的ID

时间:2019-05-16 21:45:29

标签: sql sql-server tsql

我正在尝试用另一个表(Loc)中的数据填充表(Test.dbo.ML)。

应在[VALID_FROM]字段中填充来自第三张表(Test.dbo.TEN)的日期,该日期必须与第四张表(Test.dbo.ST)相连才能确定哪个{{1 }}用于获取日期。这就是我的问题!

紧接N_ID语句之后的[N_ID]字段必须是联接的SELECT子句中的s.N_ID。我该怎么做?

我正在使用SQL Server2017。

我调查了where@@IDENTITY,但这些似乎与我要解决的问题无关。

SCOPE_IDENTITY()

对于INSERT INTO [Loc] ([LOC_ID], [TYPE], [ADRESS], [POST_CODE], [LAT], [LONG], [GEOMETRY], [VALID_FROM]) SELECT [N_ID], 'some place', [ADDRESS], [FSALDU], [COORDY], [COORDX], [GEOM], (SELECT MIN(t.open_date) FROM Test.dbo.TEN t JOIN Test.dbo.ST s ON t.S_ID = s.S_ID WHERE s.N_ID = 'problem is here!') FROM Test.dbo.ML 字段,我必须获取最早的可用日期,因此也要获取[VALID_FROM]

Test.dbo.TEN(S_ID,开放日期)

Test.dbo.ST(S_ID,N_ID)

Test.dbo.ML(N_ID,地址,FSALDU,COORDY,COORDX,GEOM)

这是一条插入语句,但是真正要解决的问题是获取要插入新表[Loc]中的正确N_ID的最早open_date!

1 个答案:

答案 0 :(得分:0)

我认为您不需要在这里子查询...您可以直接将所有表连接起来

select m.[N_ID] ,'some place' ,[ADDRESS] ,[FSALDU] ,[COORDY] ,[COORDX] ,[GEOM] ,MIN(t.open_date) 
from Test.dbo.ML m 
  join Test.dbo.ST on s.N_ID = m.n_ID 
  join Test.dbo.TEN t on t.S_ID = s.S_ID