SQL — проверяет, найдено ли уникальное значение в другой таблице

#sql #sql-server #tsql #azure-sql-database

#sql #sql-сервер #tsql #azure-sql-database

Вопрос:

У меня есть базовая таблица с миллионом номеров клиентов, всего в одном столбце. Теперь я хочу добавить второй столбец со значениями ‘1’ и ‘0’, если клиенты найдены в другой конкретной таблице.

Базовая таблица:

 select relationNr
from Relation
  

Вторая таблица:

 select relationNr
from Contract
where startdate < '01-01-2019'
    and enddate is null
    and type = 'donor'
  

Я ожидаю два столбца, первый со всеми номерами отношений, а второй с 1 или 0 if, в зависимости от того, присутствует ли оно во второй таблице или нет.

Комментарии:

1. Пожалуйста, предоставьте примерные данные и ожидаемый результат!

2. Вы запрашиваете несоответствие данных. По крайней мере, используйте триггеры для управления этим новым столбцом.

Ответ №1:

Для этого вы можете использовать внешнее соединение:

 select r.relationnr, 
       case 
          when c.relationnr is not null then 1
          else 0
        end as is_present
from relation r
  left join (
    select relationNr
    from Contract
    where startdate < '01-01-2019'
      and enddate is null
      and type = 'donor' 
  ) c on c.relationnr = r.relationnr;
  

Ответ №2:

Используйте ЛЕВОЕ СОЕДИНЕНИЕ для достижения своего результата:

 SELECT
    relationNr
    ,IIF(c.relationnr IS NOT NULL,1,0) is_present
FROM
    Relation r
    LEFT JOIN Contract c ON r.relationnr = c.relationnr
        AND c.startdate < '01-01-2019'
        AND c.enddate is null
        AND c.type = 'donor'