Как я могу вывести столбец дважды и с разными значениями на основе ссылки на другую таблицу?

#mysql #sql #where-clause

#mysql #sql #where-предложение

Вопрос:

У меня есть две таблицы message и person :

  1. message таблица содержит столбцы receiverID и senderID
  2. person таблица содержит столбцы name и personID

personID и receiverID/senderID может использоваться для соединения таблиц

У меня возникли проблемы с выводом столбца name дважды, один раз на основе receiverID , а второй на основе senderID использования WHERE предложения. Я могу вывести имя только один раз на основе personID = senderID .

 SELECT person.first_name AS senderFirstName,     
(SELECT person.first_name FROM person, message WHERE person_id = receiver_id)    
FROM person, message   WHERE person_id = sender_id AND sender_id = 1;
  

Это приводит к ERROR 1242 (21000): Subquery returns more than 1 row .
Я просто понятия не имею, что попробовать дальше … очень новичок в SQL.

Ответ №1:

Вам нужно person дважды присоединить таблицу к таблице message :

 select s.name, ...
from message m
inner join person s on m.senderid = s.personid
inner join person r on m.receiverid = r.personid
where m.senderid = 1
  

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

1. Спасибо! Кажется более эффективным, но моя домашняя работа требует использования только предложения WHERE без объединения.

Ответ №2:

Я думаю, вам это нужно:

 SELECT 
person.first_name AS senderFirstName, 
(SELECT p2.first_name FROM person p2 WHERE p2.person_id = 
m.receiver_id)receiveFirstName
FROM person p , message m 
WHERE p.person_id = m.sender_id AND m.sender_id = 1;
  

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

1. ДА!! спасибо, я не знал, что нужно использовать возможность переименования p2 и возможность псевдонима столбца после круглых скобок. Спасибо!

2. @PFKB если это решило ваш вопрос, поставьте зеленую галочку, другие, следующие форме, получат выгоду!!!!