Внутреннее объединение таблицы SQL несколько раз для одной и той же таблицы

#mysql #sql #join #select

#mysql #sql #Присоединиться #выберите

Вопрос:

У меня есть две таблицы (msg и users). Я пытаюсь объединить эти две таблицы вместе и распечатать имя и фамилию отправителя и получателя, а также все содержимое сообщения, если сообщение помечено как флаг. Однако я продолжаю получать ошибки и пока не нашел хорошего способа сделать это.

Изображения таблиц для справки: https://imgur.com/a/wYuptfR

SQL-запрос, который я использую прямо сейчас:

 SELECT msg.*, users.uuid AS users.ruuid, users.uuid AS users.suuid, users.firstName, users.lastName
FROM msg
 INNER JOIN users ON users.ruuid = msg.recipient
 AND INNER JOIN users ON users.suuid = msg.sender 
WHERE msg.flag = 0
  

Комментарии:

1. Вам нужны разные псевдонимы таблиц.

2. удалите «И»…

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

4. @LasseEdsvik Я пробовал это, я получаю ошибку # 1064

5. Пожалуйста, какой вы хотите ожидаемый результат??

Ответ №1:

Вы можете запросить одну и ту же таблицу несколько раз, если используете разные псевдонимы. Также обратите внимание, что у вас не должно быть and между двумя join предложениями:

 SELECT     msg.*, 
           r.uuid AS ruuid, r.firstName AS rfirstname, r.lastName AS rlastname,
           s.uuid AS suuid, s.firstName AS sfirstname, s.lastName AS slastname
FROM       msg
INNER JOIN users r ON r.uuid = msg.recipient
INNER JOIN users s ON s.uuid = msg.sender 
WHERE      msg.flag = 0
  

Комментарии:

1. При этом не извлекаются имя и фамилия отправителя, только получателя.

2. @Очень хороший момент. Отредактировал мой ответ и добавил их в список выбора

3. Я попробовал это и получил массивный дамп ошибок: imgur.com/a/E3pDM6H

4. У @Trae там была избыточная запятая, извините за это. Отредактировано и исправлено.

Ответ №2:

Попробуйте это

 SELECT msg.*, u.uuid , u.firstName, u.lastName, s.uuid , s.firstName, s.lastName
FROM msg
INNER JOIN users u ON u.uuid = msg.recipient
INNER JOIN users s ON s.uuid = msg.sender
WHERE      msg.flag = 0