Присоединение таблиц во время вставки, чтобы получить уникальный идентификатор - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь заполнить таблицу (Loc) данными из другой таблицы (Test.dbo.ML).

Поле [VALID_FROM] должно быть заполнено датой из третьей таблицы (Test.dbo.TEN), которую необходимо объединить с четвертой таблицей (Test.dbo.ST), чтобы определить, какую N_ID следует использовать для получения Дата. И это проблема, с которой я столкнулся!

Поле [N_ID], которое находится сразу после оператора SELECT, должно быть s.N_ID в предложении where объединения. Как я могу сделать что-то подобное?

Я использую SQL Server 2017.

Я изучил @@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] я должен получить самую раннюю доступную дату, и, следовательно, MIN(t.open_date).

Test.dbo.TEN (S_ID, open_date)

Test.dbo.ST (S_ID, N_ID)

Test.dbo.ML (N_ID, АДРЕС, FSALDU, COORDY, COORDX, GEOM)

Это оператор вставки, но получение самой ранней даты open_date для правильного N_ID, который вставляется в новую таблицу [Loc], является настоящей проблемой здесь!

1 Ответ

0 голосов
/ 18 мая 2019

Не думаю, что здесь нужен подзапрос ... вы можете просто объединить все таблицы напрямую:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...