2016-05-23 5 views
0

Я провел некоторое исследование и узнал о функции COALESCE(sum(num), 0). Проблема заключается в том, что я нашел ссылку только на использование одной таблицы.Выберите сумму нуля, если нет записей во второй таблице?

Я вычисляю сумму из второй таблицы, а если нет записей для элемента во второй таблице, я все равно хочу, чтобы он отображался в моем запросе и имел сумму нуля.

SELECT note.user, note.product, note.noteID, note.note, COALESCE(sum(noteTable.Score), 0) as points 
FROM note, noteTable 
WHERE note.user <> 3 AND note.noteID = noteTable.noteID 

Я получаю результаты только в том случае, если есть запись во второй таблице noteTable. Если для заметки добавлены оценки, я все равно хочу, чтобы они отображались в результате с нулевым значением точек.

Таблица Примеры:

Примечание

user | product | noteID |note 
3  1   1  Great 
3  2   2  Awesome 
4  1   3  Sweet 

NoteTable

noteID | score 
1   5 

Запрос должен показать мне это:

user | noteID | sum(points) 
3  1   5 
3  2   0 
4  3   0 

Но я получаю только это:

user | noteID | sum(points) 
3  1   5 
+0

При размещении MySQL, включая формат таблицы и некоторые фиктивные данные, помогает _a lot_ для пользователей, пытающихся ответить на ваш вопрос. В противном случае люди просто должны это принять. – Jhecht

ответ

2

http://sqlfiddle.com/#!9/aae812/2

SELECT 
    note.user, 
    note.product, 
    note.noteID, note.note, 
    COALESCE(sum(noteTable.Score),0) as points 
FROM note 
LEFT JOIN noteTable 
ON note.noteID = noteTable.noteID 
WHERE note.user <> 3 

, и я думаю, вы должны добавить:

GROUP BY note.noteid 

если вы ожидаете получить SUM для каждого user. Таким образом, вы хотите получить более 1 записи.

+0

Я пытаюсь получить сумму за каждую ноту. Но выше, не возвращает никаких результатов по нотам без записей во второй таблице. – Mike

+0

Поскольку я понятия не имею, что вы подразумеваете под «каждой нотой», возможно, у вас есть «note.id» (вы должны «GROUP BY note.id»). Но даже лучше, если вы можете предоставить sqlfiddle с некоторым образцом данных. – Alex

+0

пытался сделать таблицы, но форматирование вообще не отображалось. Даже новые строки .... – Mike

0

Во-первых, научитесь правильно использовать синтаксис и псевдонимы таблиц JOIN. Ответ на ваш вопрос SUM() вместе с COALESCE():

SELECT n.user, n.product, n.noteID, n.note, 
     COALESCE(sum(nt.Score), 0) as points 
FROM note n LEFT JOIN 
    noteTable nt 
    ON n.noteID = nt.noteID 
WHERE n.user <> 3 
GROUP BY n.user, n.product, n.noteID, n.note; 

Кроме того, необходимо GROUP BY.