MySQL Query Help для нескольких таблиц - PullRequest
0 голосов
/ 20 октября 2019

Хорошо, так что я работаю над последним заданием и очень застрял в этой задаче. Я пытался найти его и читать руководства, и я не получил нигде. Что еще хуже, мой профессор не удосужился научить нас, как выполнять именно этот тип задач, и я не могу попросить его о помощи, поскольку ему требуется несколько дней, чтобы ответить. Задача:

"Найти все сообщения, отправленные Майклом Фелпсом.

Создайте оператор SQL, чтобы найти все сообщения, отправленные Майклом Фелпсом.

Примечание:Вы должны использовать предложение WHERE, чтобы задать условия для этого запроса. "

Показать следующие столбцы:

  • Имя отправителя
  • Фамилия отправителя
  • Имя получателя
  • Фамилия получателя
  • ID сообщения
  • Сообщение
  • Отметка времени сообщения

У меня есть 5таблицы в моей базе данных (contact_list, image, message_image, person и message).

Обычно это будет довольно легко, однако я застрял в том, как узнать имена отправителя и получателя. Я должен как-то перекрестно ссылаться на sender_id и receive_id из таблицы сообщений с person_id из таблицы person. Это то, на чем я застрял.

Как, черт возьми, мне это удается? Я знаю, как настроить его так, чтобы он давал номера идентификаторов, но я понятия не имею, как угадать его? Так он показывает их имена вместо? Я подумал о том, чтобы просто сделать еще одну таблицу и затем запросить ее, но я вполне уверен, что я буду отмечен для этого.

Любая помощь будет принята с благодарностью.

Данные из таблицы персонала:

person_id| first_name| last_name|location

1|        Michael| Phelps| Maryland, USA

2|        Katie| Ledecky| Maryland, USA

3|        Usain| Bolt| Kingston, Jamaica

4|        Allyson| Felix| California, USA

5|        Kevin| Durant| New York City, USA

7|        Elijah| Steger| Oklahoma, USA

Данные из таблицы сообщений:

| message_id | sender_id | receiver_id | message | send_datetime|

|          1 |         1 |           2 | Congrats on winning the 800m Freestyle!    | 2016-12-25 09:00:00 |

|          2 |         2 |           1 | Congrats on winning 23 gold medals!        | 2016-12-25 09:01:00 |

|          3 |         3 |           1 | You're the greatest swimmer ever           | 2016-12-25 09:02:00 |

|          4 |         1 |           3 | Thanks!  You're the greatest sprinter ever | 2016-12-25 09:04:00 |

|          5 |         1 |           4 | Good luck on your race                     | 2016-12-25 09:05:00 |

Ожидаемый результат: таблица будет слишком большой, чтобы ее показывать, но по сути мне нужно показывать каждое отдельное сообщение, отправленное Майклом Фелпсом, и таблицунеобходимо указать его имя и фамилию, имя и фамилию получателя, идентификатор сообщения, само сообщение и отметку времени, когда сообщение было отправлено.

Моя первоначальная попытка была аналогичной;

SELECT 
s.first_name AS "Sender's First Name",
s.last_name AS "Sender's Last Name",
r.first_name AS "Receiver's First Name",
r.last_name AS "Receiver's Last Name",
m.message_id AS "Message ID",
m.message AS "Message",
m.send_datetime AS "Message Timestamp",
FROM
person s,
person r,
message m,
WHERE
m.sender_id = 1 AND
s.person_id = m.sender_id AND
r.person_id = m.receiver_id;

К сожалению, это просто не работает.

1 Ответ

1 голос
/ 20 октября 2019

Надеюсь, вы не изучили этот синтаксис объединения в классе. Объединенные через запятую объединения использовались в 1980-х годах и делались избыточными в стандартном SQL 1992.

Ваша ошибка - запятая здесь:

message m,

и здесь:

m.send_datetime AS "Message Timestamp",

Вот как должен быть написан ваш запрос:

SELECT 
  s.first_name AS "Sender's First Name",
  s.last_name AS "Sender's Last Name",
  r.first_name AS "Receiver's First Name",
  r.last_name AS "Receiver's Last Name",
  m.message_id AS "Message ID",
  m.message AS "Message",
  m.send_datetime AS "Message Timestamp"
FROM message m
JOIN person s ON s.person_id = m.sender_id
JOIN person r ON r.person_id = m.receiver_id
WHERE m.sender_id = 1
ORDER BY m.send_datetime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...