Нужна помощь с решением для SQL-запросов? - PullRequest
0 голосов
/ 19 июня 2011

У меня есть база данных адресов электронной почты.Я хочу запросить его на основе набора строк.

Я не просто хочу, чтобы результаты запроса возвращали адреса электронной почты, содержащиеся в наборе строк, - это было бы просто.

СкорееЯ хочу получить обратно все строки, использованные в запросе, а также логическое поле, которое сообщает мне, находится ли оно в таблице или нет.например: joe@joe.com TRUE sam@sam.com TRUE jim@jim.com FALSE

У меня есть решение (объединение запроса In с запросом Not In), но я надеялсядля чего-то лучшего.

(Да, я понимаю, что могу выяснить это без базы данных, выполнив простой запрос, затем удалив найденные элементы из набора строк запроса)

Ответы [ 3 ]

1 голос
/ 19 июня 2011

Поместите адреса, по которым вы запрашиваете, во (временную) таблицу, затем ВЛЕВО присоедините к ней таблицу адресов электронной почты.

SELECT
  r.email_address,
  CASE WHEN e.email_address IS NULL THEN 'FALSE' ELSE 'TRUE' END AS is_present
FROM requested_emails r
  LEFT JOIN email_addresses e ON r.email_address = e.email_address
0 голосов
/ 19 июня 2011

Обратите внимание, что SQL не имеет логического типа.Здесь я использую строку.

SELECT email_address, NVL( sq.present, 'FALSE' ) AS present
  FROM mytable t
  LEFT JOIN ( SELECT email_address, 'TRUE' AS present 
                FROM mytable
               WHERE email_address in ( ... your list here ... )
            ) sq ON sq.email_address = t.email_address
0 голосов
/ 19 июня 2011
declare @CrappyStr varchar(10)
set @CrappyStr = 'dummy'

select @CrappyStr AS SearchString
, email_address
, CASE WHEN charindex(@CrappyStr, email_address) > 0 THEN 'True'
 ELSE 'False' END AS [BOO-lean]
from SnarkyTable
...