#mysql #sql #where-clause
#mysql #sql #where-предложение
Вопрос:
У меня есть две таблицы message
и person
:
message
таблица содержит столбцыreceiverID
иsenderID
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 если это решило ваш вопрос, поставьте зеленую галочку, другие, следующие форме, получат выгоду!!!!