SQL - Как получить имя, используя номер из другой таблицы?

Ниже приведены мои таблицы создания базы данных с использованием SQL. Я не могу понять, как получить имя, отображаемое как для ID, так и для LIKED из таблицы лайков.

Это задание должно быть простым, уметь отображать имена людей, которые нравятся друг другу. Существует форма ввода данных, которая требует ввода идентификаторов для людей, которые нравятся друг другу, но тогда мне нужно отобразить имена обоих людей, которые нравятся друг другу... Надеюсь, я не запутал . Возможно ли, чтобы какой-то код SQL отображал имена тех, кто кого любит.

CREATE TABLE person 
(
    ID INT PRIMARY KEY,
    NAME VARCHAR(50)
) engine=innodb;

CREATE TABLE likes 
(
    ID INT,
    LIKED INT,
    constraint likesPK primary key(ID,LIKED),
    constraint personFK foreign key(ID) references person(ID)
    on delete cascade on update cascade,
    constraint nameFK foreign key(LIKED) references person(ID)
    on delete cascade on update cascade
) engine=innodb;

Пример того, что я пытался сделать, но мне нужен еще один столбец для отображения человека «НРАВИТСЯ»:

     select B.id, B.name, A.lIKED from likes A, person B where A.id=B.id AND A.id = 1;

person Sean Cleveland    schedule 27.04.2013    source источник
comment
В вашем запросе отсутствует соединение между двумя таблицами.   -  person chuff    schedule 27.04.2013
comment
где a.id = b.id выглядит как объединение.   -  person Dan Bracuk    schedule 27.04.2013


Ответы (3)


Во-первых, я машу пальцем в вашем общем направлении. Программирование требует точности, и ваша фраза «использование sql» была расплывчатой. Если вы имели в виду сервер sql, так и скажите. На самом деле, отредактируйте свой пост и добавьте соответствующий тег.

Во-вторых, ваши каскады удаления находятся не в том месте. На самом деле, в этом сценарии каскадное удаление, вероятно, очень плохая идея.

В-третьих, что это было снова? Ах да, ваш вопрос. Как показать людей, которые нравятся друг другу? Вероятно, что-то вроде этого:

select p1.whatever, p2.whatever
from person p1  -- this would be me
join likes l1 on p1.id = l1.id  -- this is who I like, which is you
join likes l2 on l1.liked = l2.id -- this is who you like, which is me
join person p2 on l2.id = p2.id  -- this is you
etc

Кстати, я не думал, что это просто.

person Dan Bracuk    schedule 27.04.2013
comment
...Я машу пальцем в твоем общем направлении, это будет моей новой любимой фразой на следующей неделе... - person Tieson T.; 27.04.2013

попробуй это

select b.id, b.name, (select name from person where id = a.liked) 
from likes a join person b 
on a.id = b.id
where b.id = some id AND b.id = a.id
person Þaw    schedule 27.04.2013

Похоже, что ваша таблица like должна иметь две ссылки на таблицу person (что делает ее промежуточной/сводной таблицей); в основном, один «лайк-ии» и один «лайк-или». Таким образом, like, вероятно, должен выглядеть так:

like
--------------
ID int
PersonWhoLikedID int
PersonWhoWasLikedID int

Тогда ваш запрос превращается в это:

SELECT B.name, C.name AS `Liked Person`
FROM likes
LEFT JOIN person B ON likes.PersonWhoLikedID = B.ID
LEFT JOIN person C ON likes.PersonWhoWasLikedID = C.ID
person Tieson T.    schedule 27.04.2013
comment
не нужен еще один кол. id — это человек, который «понравился», если только вы не укажете, что идентификатор таблицы лайков будет первичным автоматическим ключом для таблицы лайков. что это хорошая идея - person tgkprog; 27.04.2013