Используйте LEFT JOIN
, а затем COALESCE
значения имени, чтобы учесть нули.Что касается COALESCE
против ISNULL
, COALESCE
является частью стандартов ANSI, что сделает его переносимым на другие СУБД, такие как Oracle и DB2.Вы упомянули, что столбец имени может быть нулевым в обеих таблицах.Если вы хотите подставить дополнительное значение, COALESCE
позволит это сделать, тогда как ISNULL
принимает только два параметра.Тип данных результата также различен для обеих функций: ISNULL
использует тот же тип данных, что и первый параметр, тогда как COALESCE
будет использовать тип данных с наивысшим приоритетом.Имейте в виду, что это может привести к ошибкам преобразования, если будет предпринята попытка неявного преобразования типа данных с более низким приоритетом в тип данных с более высоким приоритетом.Типичным примером является попытка преобразовать тип VARCHAR
/ NVARCHAR
в числовой.Список типов данных по приоритету можно найти здесь .
SELECT
FT.ID,
COALESCE(FT.Name, PT.Name, 'Name Not Listed') as Name
FROM DBO.TableWithFK FT
LEFT JOIN DBO.TableWithPK PT on FT.ID = PT.ID