如何从SQLite中的表中获取多个值?

时间:2015-04-28 03:34:46

标签: database sqlite

我有三张桌子:

作者
ID 命名
1 阿尔伯特
2 巴比
3 卡尔
4

authors_musicals
ROWID AUTHOR_ID musical_id
1 1 1
2 2 1
3 1 2
4 1 3

音乐剧
ID 标题
1 Brigadoon 1947
2 My Lady Lady 1956
3 俄克拉荷马! 1943
4 柯莱特 1960

我需要获取属于Albert的所有标题(作者id(1)对应musical_id(1,2,3)在 authors_musicals 中,每个都对应于音乐剧中的title(Brigadoon,My Fair Lady,Oklahoma!)。我认为以下内容可行:

SELECT title FROM musicals WHERE id=(SELECT musical_id FROM authors_musicals WHERE author_id=(SELECT id FROM authors WHERE name="Albert"));

这只给了我第一个上市。我怎样才能得到所有三个,因为这些表是相互关联的,有没有更简单的方法来获得我想要的东西?

3 个答案:

答案 0 :(得分:2)

JOIN表:

SELECT musicals.title
FROM musicals 
JOIN authors_musicals ON (musicals.id = authors_musicals.musical_id)
JOIN authors ON (authors.id = authors_musicals.author_id)
WHERE authors.name = "Albert"

答案 1 :(得分:0)

我不使用SQLite,但我认为它与将SQL用于任何其他数据库基本相同。使用SomeColumn = SomeValue时,右侧只能有一个值。即使您的子查询产生多个结果,也只会使用第一个,因为您使用的是=

假设SQLite支持该运算符,您应该能够通过将=替换为IN来保留当前的SQL结构并使其工作。然后你将与所有结果进行比较,而不只是一个。

那就是说,我认为你根本不应该使用子查询。在那里使用连接似乎更合适。同样,可能会有一些小的语法差异,但这样的事情应该有效:

SELECT title FROM musicals INNER JOIN authors_musicals
ON musicals.musical_id = authors_musicals.musical_id INNER JOIN authors
ON authors.author_id = authors_musicals.author_id
WHERE authors.name = 'Albert'

答案 2 :(得分:0)

结合表之间的信息并获得所需内容:

SELECT title 
FROM authors, authors_musicals, musicals
WHERE name="Albert" and authors.id=authors_musicals.author_id and musical_id = musicals.id;