我有一个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重复的问题。
提前感谢您的帮助。
答案 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
。