【问题标题】:How do you query in SQLite3 with foreign keys and different tables?如何在 SQLite3 中使用外键和不同的表进行查询?
【发布时间】:2013-09-21 05:21:00
【问题描述】:

我正在尝试查询某些内容,例如根据“李安”的导演姓名检索电影名称。我将电影和导演分成两张桌子。我有第三张表,其中包含电影 ID 和导演 ID,我试图将所有内容与之联系起来。所以我需要做的一件事是找到以“李安”为名导演的电影(MId、Title、ReleaseDate)。为了得到这个结果,我必须发送什么类型的查询?这是我的代码的背景:

CREATE TABLE MOVIE(
    MId INTEGER,
    Title VARCHAR(50),
    ReleaseDate DATE,
    Budget DOUBLE,
    PRIMARY KEY (MId)
);


CREATE TABLE DIRECTOR(
    DId INTEGER,
    Name VARCHAR(30),
    DateOfBirth DATE,
    PRIMARY KEY (DId)
);

CREATE TABLE DIRECTED(
    DirectorId INTEGER,
    MovieId INTEGER,
    PRIMARY KEY(DirectorId, MovieId),
    FOREIGN KEY(DirectorId) REFERENCES DIRECTOR(DId),
    FOREIGN KEY(MovieId) REFERENCES MOVIE(MId)
);

INSERT INTO MOVIE VALUES(1, 'Life of Pi', '2012-11-21', 120000000);
INSERT INTO MOVIE VALUES(3, 'Argo', '2012-10-12', 44500000);
INSERT INTO MOVIE VALUES(7, 'The Dark Knight Rises', '2012-07-20', 250000000);
INSERT INTO MOVIE VALUES(15, 'Thor', '2011-12-10', 150000000);
INSERT INTO MOVIE VALUES(45, 'The Sessions', '2012-01-23', 1000000);
INSERT INTO MOVIE VALUES(65, 'Batman Begins', '2005-06-15', 150000000);
INSERT INTO MOVIE VALUES(86, 'Goodfellas', '1990-09-19', 25000000);
INSERT INTO MOVIE VALUES(95, 'The Departed', '2006-10-06', 90000000);
INSERT INTO MOVIE VALUES(103, 'There's Something about Mary', '1998-07-15', 23000000);
INSERT INTO MOVIE VALUES(123, 'The Matrix', '1999-05-31', 63000000);
INSERT INTO MOVIE VALUES(144, 'Lust, Caution', '2007-09-28', 15000000);

INSERT INTO DIRECTOR VALUES(4, 'Ang Lee', '1954-10-23');
INSERT INTO DIRECTOR VALUES(5, 'Ben Affleck', '1972-08-15');
INSERT INTO DIRECTOR VALUES(8, 'Christopher Nolan', '1970-07-30');
INSERT INTO DIRECTOR VALUES(9, 'Kenneth Branagh', '1960-12-10');
INSERT INTO DIRECTOR VALUES(13, 'Ben Lewin', '1946-01-23');
INSERT INTO DIRECTOR VALUES(23, 'Martin Scorsese', '1942-11-17');
INSERT INTO DIRECTOR VALUES(25, 'Christopher Nolan', '1970-07-30');
INSERT INTO DIRECTOR VALUES(33, 'Peter Farrelly', '1956-12-17');
INSERT INTO DIRECTOR VALUES(34, 'Robert Farrelly', '1958-06-17');
INSERT INTO DIRECTOR VALUES(45, 'Lana Wachowski', '1965,06-21');
INSERT INTO DIRECTOR VALUES(46, 'Andrew Wachowski', '1967-12-29');

INSERT INTO DIRECTED VALUES(4, 1);
INSERT INTO DIRECTED VALUES(5, 3);
INSERT INTO DIRECTED VALUES(8, 7);
INSERT INTO DIRECTED VALUES(9, 15);
INSERT INTO DIRECTED VALUES(13, 45);
INSERT INTO DIRECTED VALUES(25, 65);
INSERT INTO DIRECTED VALUES(23, 86);
INSERT INTO DIRECTED VALUES(23, 95);
INSERT INTO DIRECTED VALUES(33, 103);
INSERT INTO DIRECTED VALUES(34, 103);
INSERT INTO DIRECTED VALUES(45, 123);
INSERT INTO DIRECTED VALUES(46, 123);
INSERT INTO DIRECTED VALUES(4, 144);

【问题讨论】:

    标签: sql database sqlite foreign-keys foreign-key-relationship


    【解决方案1】:
    SELECT m.MId, m.Title, m.ReleaseDate   
    FROM DIRECTED dir, DIRECTOR d, MOVIE m WHERE
    d.Name = 'Ang Lee' AND
    d.DId = dir.DirectorId AND
    dir.MovieId = m.MId
    

    看看concept of joins

    【讨论】:

    • 这似乎在大多数情况下都有效。当我查询这个时,它只提取了其中一部电影“Pi Life of Pi”。我怎么也能得到“色戒”?
    • 你可以使用它。只需将 ' 替换为 '' (所以两次 ')。基本上你可以使用任意名称。您唯一需要做的就是在您的 SQL 查询中转义它们。看看这个:kamath.com/codelibrary/cl003_apostrophe.asp
    • 感谢您告诉我!
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2023-03-23
    • 2022-01-23
    相关资源
    最近更新 更多