SQL Server - Присоединяйтесь, только когда условие является числом - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть таблица EmployeeLeave

  CREATE TABLE EmployeeLeave (
  EmployeeId INT,
  LeaveType VARCHAR()
  );

В LeaveType могут быть как числа, так и строки.

  CREATE TABLE MST_LeaveReason (
  ReasonId INT,
  Reason VARCHAR()
  );

  SELECT * FROM EmployeeLeave EL
  LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType 

Вышеупомянутый запрос не будет работать, поскольку LeaveType не всегда является числом.Я хочу, чтобы это объединение работало, только если LeaveType - число.Как я могу это реализовать.Пожалуйста, помогите.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 ноября 2018

Использование try_convert():

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);

Вы также можете сделать это в другом направлении:

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;

Затем приступайте к исправлению модели данных.JOIN ключи должны быть одного типа.Такие преобразования сильно влияют на производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...