SQL中的这个JOIN语句有什么问题?

时间:2016-04-28 15:52:17

标签: sql

我正在研究有关SQL的this tutorial。在第2步(共2步)中,要求使用JOIN命令使用persons列表中的信息链接friends列表中的2个人。我编辑了提供的代码并获得了下面的代码:相关部分以select persons.fullname, persons2.fullname开头。但是,代码的最后一段('相关代码')不会产生任何结果或错误消息。我做错了吗?

代码

CREATE TABLE persons (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    fullname TEXT,
    age INTEGER);

INSERT INTO persons (fullname, age) VALUES ("Bobby McBobbyFace", "12");
INSERT INTO persons (fullname, age) VALUES ("Lucy BoBucie", "25");
INSERT INTO persons (fullname, age) VALUES ("Banana FoFanna", "14");
INSERT INTO persons (fullname, age) VALUES ("Shish Kabob", "20");
INSERT INTO persons (fullname, age) VALUES ("Fluffy Sparkles", "8");

CREATE table hobbies (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    person_id INTEGER,
    name TEXT);

INSERT INTO hobbies (person_id, name) VALUES (1, "drawing");
INSERT INTO hobbies (person_id, name) VALUES (1, "coding");
INSERT INTO hobbies (person_id, name) VALUES (2, "dancing");
INSERT INTO hobbies (person_id, name) VALUES (2, "coding");
INSERT INTO hobbies (person_id, name) VALUES (3, "skating");
INSERT INTO hobbies (person_id, name) VALUES (3, "rowing");
INSERT INTO hobbies (person_id, name) VALUES (3, "drawing");
INSERT INTO hobbies (person_id, name) VALUES (4, "coding");
INSERT INTO hobbies (person_id, name) VALUES (4, "dilly-dallying");
INSERT INTO hobbies (person_id, name) VALUES (4, "meowing");

CREATE table friends (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    person1_id INTEGER,
    person2_id INTEGER);

INSERT INTO friends (person1_id, person2_id)
    VALUES (1, 4);
INSERT INTO friends (person1_id, person2_id)
    VALUES (2, 3);

/* personal contribution starts here

select persons.fullname,hobbies.name
    from persons
    join hobbies
    on hobbies.person_id=persons.id;

/* select persons.fullname, persons2.fullname
    from persons
    join persons persons2
    join friends
    on persons.fullname=friends.person1_id and persons2.fullname=friends.person2_id; */

/* relevant code: */
select persons.fullname, persons2.fullname
    from persons
    join friends
    on persons.fullname=friends.person1_id
    join persons persons2
    on persons2.fullname=friends.person2_id;

[tutorial(c)khanacademy.org]

1 个答案:

答案 0 :(得分:3)

join friends
on persons.fullname=friends.person1_id

您只包含person1_id等于某人姓名的朋友。由于person1_id是一个整数,fullname是文本,因此它们永远不会相等。你可能想要:

select persons.fullname, persons2.fullname
from persons
join friends
on persons.id=friends.person1_id
join persons persons2
on persons2.id=friends.person2_id;