Можно ли написать запрос SQL, который делает это без подвыбора? - PullRequest
0 голосов
/ 17 января 2011

Представьте себе отношение один ко многим, например:

Mail: subject, date etc 
Recipient: address

Возможно ли выполнить этот запрос БЕЗ использования подвыбора : вся почта, полученная abc@domain.com, котораяу меня не было другого получателя из того же домена @ domain.com ??

, единственный способ найти - использовать выборку:

select mail m, recipient r where m.pkm=r.pkm 
and (r.address='abc@domain.com')
and not exists (select * from mail ms, recipient rs where m.pkm=ms.pkm and ms.pkm=rs.pkm and rs.address<>'abc@domain.com' and rs.address like '%@domain.com') 

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Я не уверен, что это лучше, чем ваш оригинал!- он все еще имеет суб-выбор - но позволяет доменам отличаться от литерала «domain.com».

SELECT m.*
FROM mail m
INNER JOIN 
(
    SELECT DISTINCT pkm
    FROM recipient
    GROUP BY pkm, SUBSTRING(email, CHARINDEX('@', email) + 1, 1000)
    HAVING COUNT(SUBSTRING(email, CHARINDEX('@', email) + 1, 1000))  = 1
) r
ON m.pkm = r.pkm

hth, R

0 голосов
/ 17 января 2011
select m.*, r1.* 
from mail m
inner join recipient r1 on m.pkm=r1.pkm
left join recipient r2 on m.pkm=r2.pkm and r2.address<>'abc@domain.com' and r2.address like '%@domain.com'
where r2.pkm is null
and r1.address='abc@domain.com'
...