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;
请和谢谢!
试试这个
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
不需要另一个列。 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
顺便说一下,我不认为这很简单。
“......我在你的大方向上挥动手指”将成为我下周的新宠...... – 2013-04-27 03:55:12
您的查询缺少两个表之间的连接。 – chuff 2013-04-27 03:42:58
其中a.id = b.id看起来像一个连接给我。 – 2013-04-27 04:00:47