Я ищу помощь в написании запроса извлечения значений из 2 таблиц в MySQL.
Сценарий
Таблица A
ID Name Marks
===================
23 John 67
45 Mark 45
12 Ram 87
Таблица B имеет следующую структуру
ID Name Evaluation Marks
==============================
45 Mark 34
78 Chris 09
98 Nancy 10
23 John 12
Я пытаюсь написать запрос, где, если я выполнил следующий запрос
Select "SOMETHING" from Table A where Id=45
Я должен получить столбцы Marks как 45 + 34 = 79, которые должны извлекать и суммировать из таблиц A и таблицы B.
Если я выполняю запрос с Id = 12. Поскольку Id = 12, не существует в таблице B, я должен получить отметки как 87.
Что будет для запроса выше?
Я предполагаю, что идентификатор встречается только один раз в таблице ваши таблицы, но может отсутствовать в обоих. Если он всегда существует в таблице a
, вы можете использовать LEFT JOIN
вместо UNION
.
SELECT COALESCE(SUM(marks), 0)
FROM
(
SELECT marks FROM a WHERE id = 45
UNION ALL
SELECT SUM(evaluation_marks) AS marks FROM b WHERE id = 45
) x
Edit
Если у вас есть все пользователи в таблице a, используйте
SELECT a.marks + COALESCE( SUM( b.evaluation_marks ), 0 )
FROM a
LEFT OUTER JOIN b ON ( b.id = a.id )
WHERE a.id = 45
GROUP BY a.id, a.marks
Однако вы должны изменить свою модель таблицы. Почему вы дважды храните имя и идентификатор? Вы не можете сделать это так:
id name marks evaluation marks
=======================================
12 Ram 87 0
23 John 67 12
45 Mark 45 34
78 Chris 0 9
98 Nancy 0 10