Получить значение, где идентификатор в одной таблице равен идентификатору в другой таблице - PullRequest
0 голосов
/ 03 февраля 2020

Я застрял в этой SQL проблеме, которая может оказаться проще, чем я думаю. Итак, в двух словах, как мне go выбрать стоимость в соответствующем гараже, когда GarageHistID в таблице GarageCosts равно ID в таблице GarageHistory?

Стоимость гаража

GarageID    Cost     Version      GarageHistID
  950       213         1          455
  950       342         3          NULL

История гаража

 ID     VendorID      Version       GarageID
454        44           1             NULL
455         2           1             950
456        44           2             NULL

Ожидаемый результат:

 VendorID      Cost     Version 
     2          213        1
     44          0         1
     44          0         2

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Это просто левое соединение, объединяющее ноль в ноль.

SELECT 
    gh.VendorID,
    ISNULL(gc.Cost,0) AS Cost,
    gh.Version
FROM GarageHistory gh
LEFT JOIN GarageCost gc
    ON gh.GarageID = gc.GarageID
    AND gh.VersionID = gc.VersionID

Нет необходимости (указывать c), что необходимо иметь двунаправленные ключи в ваших 2 таблицах, но вы можете использовать либо для объединения (вместе с VersionID).

1 голос
/ 03 февраля 2020

Следующий запрос дает точные результаты, которые вы упомянули в своем вопросе. Вы можете использовать левое объединение для объединения двух таблиц на основе поля GarageHistID в таблице GarageCosts и поля идентификатора в таблице GarageHistory

  SELECT 
    gh.VendorID,
    ISNULL(gc.Cost,0) AS Cost,
    gh.[Version] 
FROM GarageHistory gh
 left JOIN GarageCosts gc
    ON gh.ID = gc.GarageHistID
        order by gc.Cost desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...