SQL - 如何使用不同表中的数字获取名称?

问题描述:

下面是我使用SQL为数据库创建表。 我无法弄清楚如何从喜欢的表中获得ID和LIKED显示的名称。 这个任务应该很简单,能够显示彼此喜欢的人的名字。有一个数据输入表格,需要为相互喜欢的人输入ID,但是我必须显示两个相互喜欢的人的姓名....我希望我没有把这个混淆。 某些sql代码可能显示谁喜欢谁的名字。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; 

请和谢谢!

+0

您的查询缺少两个表之间的连接。 – chuff 2013-04-27 03:42:58

+0

其中a.id = b.id看起来像一个连接给我。 – 2013-04-27 04:00:47

试试这个

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 

好像你like表应该有两个引用到person表(使其中间/透视表);基本上,一个“like-ee”和一个“like-or”。所以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 
+0

不需要另一个列。 id是'喜欢'的人,除非你指定让喜欢的表id成为表喜欢的主要自动键。这是一个好主意 – tgkprog 2013-04-27 06:39:03

首先,我会挥动手指在你的大方向。编程需要精确和你的短语,“使用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 

顺便说一下,我不认为这很简单。

+0

“......我在你的大方向上挥动手指”将成为我下周的新宠...... – 2013-04-27 03:55:12