Требуется справка по запросу базы данных в MySQL - PullRequest
0 голосов
/ 12 января 2010

Я ищу помощь в написании запроса на получение значений из 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

Я должен получить столбец меток как 45 + 34 = 79, который должен быть получен и суммирован из таблиц А и В.

Если я выполню запрос с Id = 12. Поскольку Id = 12 не существует в таблице B, я должен получить оценки как 87.

Что бы запросить выше?

1 Ответ

1 голос
/ 12 января 2010

Я предполагаю, что идентификатор встречается только один раз в ваших таблицах в таблице a, но может отсутствовать в обоих. Если он всегда существует в таблице 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

Редактировать

Если у вас есть все пользователи в таблице 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...