Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка на наличие записи в другой таблице.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Честно поискал на форуме ответ на вопрос, не нашел.

Есть две таблицы, нужно проверить есть ли id из первой таблицы во второй, и вывести 1 или 0.

Запрос мой такой:

SELECT JR.Oid ,CL.done
FROM  journal as JR
left join check as CL on CL.journal = JR.Oid


Например в таблице check в столбце journal может быть oid из таблицы journal.

На выходе хотелось бы примерно такой результат:
Oid done
4FF20401-0816-11E9-BB99-00155D754600 0
DC9A9A18-0816-11E9-BB99-00155D754600 0
62227781-0814-11E9-BB99-00155D754600 1
AAA74E39-85DB-11E9-BB9F-00155D754600 1
B1894460-080E-11E9-BB99-00155D754600 0
DDC3AF59-0813-11E9-BB99-00155D754600 1
3 июн 19, 14:36    [21900543]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
case используйте или iif
3 июн 19, 14:57    [21900567]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
попробовал написать так:

SELECT JR.Oid 
      ,CASE WHEN CL.journal IS NULL THEN 0 ELSE 1 END done
FROM  journal as JR
left join check as CL on CL.journal = JR.Oid


но он выводит много строк если в таблице check есть повторяющийся id.
3 июн 19, 15:17    [21900600]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Hopfen_Artur,

COUNT проверять
3 июн 19, 15:18    [21900602]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
так заработало, это правильный запрос:
смущает group by

SELECT JR.Oid 
      ,CASE WHEN COUNT(CL.journal) = 0 THEN 0 ELSE 1 END as done
FROM  journal as JR
left join check as CL on CL.journal = JR.Oid
group by JR.Oid
3 июн 19, 15:35    [21900614]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Hopfen_Artur,


автор
смущает group by

краснеете?
3 июн 19, 15:40    [21900619]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
Hopfen_Artur
смущает group by
Правильно смущает.
Без него:
SELECT JR.Oid 
      ,CASE WHEN exists(select 1 from [check] where journal = JR.Oid) THEN 1 ELSE 0 END done
FROM  journal as JR
3 июн 19, 15:44    [21900625]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
SELECT 
      JR.Oid, 
      CASE WHEN CL.journal IS NULL THEN 0 ELSE 1 END done
FROM  journal as JR left outer join (SELECT DISTINCT journal FROM [check]) as CL 
  on CL.journal = JR.Oid;
3 июн 19, 15:47    [21900631]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
всем спасибо =)
3 июн 19, 16:02    [21900654]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
SELECT JR.Oid 
      ,ISNULL((SELECT TOP(1) 1 FROM [check] WHERE journal = JR.Oid),0) done
FROM  journal as JR;
3 июн 19, 16:03    [21900657]     Ответить | Цитировать Сообщить модератору
 Re: Проверка на наличие записи в другой таблице.  [new]
uaggster
Member

Откуда:
Сообщений: 767
iap
SELECT JR.Oid 
      ,ISNULL((SELECT TOP(1) 1 FROM [check] WHERE journal = JR.Oid),0) done
FROM  journal as JR;


Все извращаются. Можно, я тоже?
SELECT JR.Oid 
      ,ISNULL(t.Yes, 0) done
FROM  journal as JR
		outer apply (Select 1
				 Where exists (Select 1 FROM [check] WHERE journal = JR.Oid)) t(Yes)

Хотя план, наверняка будет говно.
:-)
5 июн 19, 10:41    [21902225]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить