SQLite:选择给定颜色的所有名称

时间:2015-07-25 10:55:49

标签: sqlite

我有一个SQLite数据库,其中两个表是这样的:

ID    Name
1     Test1
2     Test2
3     Test3
4     Test4

ID    Color
1     Blue
1     White
1     Red
2     Green
2     Red
4     Black

在第一个表中,ID是唯一的,第二个表列出了ID所具有的颜色,它可以是0到n种颜色。

现在我想要选择一次只有一个或多个给定颜色的所有名称。可以说,我希望所有名称都与蓝色,白色和/或绿色相关联。结果集应具有ID 1和2。

我完全迷失在这里,因为我通常不会做任何SQL。我只是熟悉非常基本的SQL。我要做的是将表加在一起,但我不知道我是怎么做的,因为ID在第二个表中并不是唯一的。如果它有多种我想要选择的颜色,那么结果集中会出现ID重复的问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你不需要加入。从子查询中的颜色表中获取ID列表,并使用in子句从测试表中获取名称:

sqlite> select * from tests where id in
        (select id from colors where name in ('Blue', 'White', 'Green'));
1|Test1
2|Test2

副本在子查询中不重要,但如果您希望该列表在其他上下文中没有重复,则可以使用distinct