好的,我认为我真的很喜欢我,所以请耐心等待我!
我有一个简单的SQLite表,其设置如下:
DROP TABLE IF EXISTS "game_authors";
CREATE TABLE "game_authors" ("key" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "book_key" INTEGER NOT NULL DEFAULT 0, "author_key" INTEGER NOT NULL DEFAULT 0);
KEY | BOOK | AUTHOR
-------------------
1 1 1
2 2 5
3 2 6
4 3 2
5 4 5
6 4 6
7 5 10
8 6 11
9 9 14
10 10 9
11 11 4
12 22 4
我试图解决的搜索是找到作者的所有书籍。示例:我想要一个包含author_key = 5和author_key = 6的所有book_keys的列表。 也许它真的很容易,我无法在我面前看到它,但我无法弄明白。任何帮助将不胜感激!
答案 0 :(得分:1)
要获得一本有两位作者的书,您可以使用子查询来完成:
SELECT book_key
FROM game_authors
WHERE author_key = 5
AND book_key IN (
SELECT book_key
FROM game_authors
WHERE author_key = 6
);
OR与同一个表的内部联接,将两者与book_key链接
SELECT a.book_key
FROM game_authors a
INNER JOIN game_authors b ON a.book_key = b.book_key
WHERE a.author_key = 5
AND b.author_key = 6;
您可以查看this fiddle以查看其是否有效
答案 1 :(得分:1)
如果您想查找由同一作者撰写的所有图书,则可以使用INTERSECT
。查询看起来像,
SELECT book_key FROM game_authors WHERE author_key = 5
INTERSECT
SELECT book_key FROM game_authors WHERE author_key = 6
这将获取作者#5的所有书籍列表,并将该列表与作者#6的书籍相交,给出两者书写的书籍列表。
您需要author_key
列上的索引才能进行快速查找。为了避免额外的表查找从表中检索book_key
,您可以在(author_key, book_key)
上创建覆盖索引,以加快速度。
这是fiddle。
答案 2 :(得分:0)
这将为您提供一位作者:
select * from game_authors where author_key = ?
如果你想了解更多的作者,你可以将其中的一堆结合在一起:
select book_key from game_authors where author_key = ?
UNION
select book_key from game_authors where author_key = ?
UNION
select book_key from game_authors where author_key = ?
等