2010-05-03 4 views
1

У меня есть две таблицы, как указано ниже:Объединение двух таблиц с использованием счета

EMAILS 
ID  SUBJECT BODY 
1  Test1  blah blah 
2  Test2  blah blah blah 
3  Test3  more blah 

ATTACHMENTS 
ID EMAIL_ID ATTACHMENT NAME 
1 2   TEST.DOC 
2 2   TEST.XLS 

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

EMAIL_ID SUBJECT NUM_ATTACHMENTS  BODY 
    1  Test1  0     blah blah 
    2  Test2  2     blah blah blah 
    3  Test3  0     more blah 

Я пробовал все, кроме «правильного пути», и если кто-нибудь есть несколько минут, чтобы помочь мне создайте правильный SQL, чтобы построить это, я очень благодарен. Благодарю.

ответ

3

Мне нравится brydgesk's solution, но предпочел бы не использовать подзапрос, когда это возможно.
Этот запрос будет отображаться 0, если для данного сообщения нет вложений.

SELECT 
    a.email_id, 
    e.subject, 
    e.body, 
    COALESCE(count(a.id),0) AS NUM_ATTACHMENTS 
FROM 
    emails e 
    LEFT OUTER JOIN attachments a 
    ON e.id = a.email_id 
GROUP BY 
    a.email_id, e.subject, e.body 
+0

Это один прибил его. Очень признателен. – Dave

+0

@ Дэйв: рад, что у вас это работает. Я забыл поднять ваш вопрос как полезный и понятный, но сделал это сейчас. Приветствия. – bernie

+0

Btw, спасибо, что показал мне функцию COALESCE. TBH, я даже не видел этого :(. Однако теперь я могу видеть, насколько чрезвычайно полезно в этой ситуации. – Dave

0

Вы пробовали что-то вроде этого? (Непроверенные)

SELECT 
    e.id, 
    e.subject, 
    count(*), 
    e.body 
FROM 
    (SELECT * 
    FROM emails e 
    JOIN attachments a 
    ON e.id = a.email_id) 
GROUP BY e.id, e.subject, e.body 
0

Вы можете сделать это как простой подзапрос в ЗЕЬЕСТ:

Select E.ID As EMAIL_ID 
    , E.SUBJECT 
    , (Select Count(*) 
     From ATTACHMENTS As A 
     Where A.EMAIL_ID = E.ID) As NUM_ATTACHMENTS 
    , E.BODY 
From EMAILS As E 
Смежные вопросы