gpt4 book ai didi

SQL 在 n 到 m 关系中选择

转载 作者:行者123 更新时间:2023-12-04 11:55:56 25 4
gpt4 key购买 nike

我在 Author 之间有 n 对 m 的关系和 Book .

表格作者

ID       Name
1 Follett
2 Rowling
3 Martin

表书
ID     Title                       Category 
1 A Dance with Dragons Fantasy
2 Harry Potter Fantasy
3 The Key to Rebecca Thriller
4 World without end Drama

表 book_author
authorId       bookId
1 3
2 2
3 1
1 4

系统中有更多的作者和书籍。现在我想选择所有拥有“幻想”类型书籍的作者。

这是我到目前为止的想法:
   select distinct a.id 
from author a, book b, written w
where w.authorId = a.id and w.bookId = b.id and b.category = "Fantasy";

我想知道如何优化这个查询,因为特别是 table book 真的很大。

最佳答案

建议使用显式 JOIN而不是您目前拥有的隐式(逗号分隔的表列表)连接,因为它会在您需要引入左连接时提高灵活性。

SELECT
DISTINCT a.id
FROM
author a
JOIN book_author ba ON a.id = ba.authorId
JOIN books b ON b.id = ba.bookId
WHERE b.category = 'Fantasy'

如果您的 book_author已定义 FOREIGN KEY关系回到 authorbooks表,索引将被强制执行。同样,相应的 id这些表中的列应定义为 PRIMARY KEY .除此之外,您可以做的唯一潜在优化是在 books.category 上创建索引。 .
CREATE TABLE book_author (
authorId INT NOT NULL, /* or whatever the data type... */
bookId INT NOT NULL,
/* define FK constraints in book_author */
FOREIGN KEY (authorId) REFERENCES author (id),
FOREIGN KEY (bookId) REFERENCES books (id)
);

关于SQL 在 n 到 m 关系中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com