Select 给定键列表的一堆数据
Select a bunch of data given a list of key
刚开始学习SQL遇到了一个问题。我是 SQL 的新手,我什至不知道要 google 使用哪些关键字来解决这个问题。
我有两个table:
- table一个
id | name
01 | abc
02 | ahb
03 | aen
04 | aev
05 | aca
06 | aee
07 | abc
08 | ahr
还有第二个:
- tableb
group | name_id
A | 01
A | 02
A | 03
A | 04
A | 05
A | 06
B | 07
B | 08
假设我想 SELECT 所有名称都属于 A 组。
我写了下面的代码:
SELECT name FROM tablea WHERE id = (SELECT name_id from tableb WHERE group = "A");
然而,结果只给我一行。
您必须使用 IN
而不是 =
SELECT name FROM tablea WHERE id IN (SELECT name_id from tableb WHERE group = "A");
对于您的示例数据,查询应该出错 - 因为子查询 returns 多于一行,这在此处是不期望的,因为您使用的是 =
.
如果 name_id
是 tableb
中的唯一列,则 join
是合适的:
select a.name
from tablea a
inner join tableb b on b.name_id = a.id
where b.group = 'A'
否则我推荐exists
:
select a.name
from tablea a
where exists (select 1 from tableb b where b.name_id = a.id and b.group = 'A')
刚开始学习SQL遇到了一个问题。我是 SQL 的新手,我什至不知道要 google 使用哪些关键字来解决这个问题。
我有两个table:
- table一个
id | name
01 | abc
02 | ahb
03 | aen
04 | aev
05 | aca
06 | aee
07 | abc
08 | ahr
还有第二个:
- tableb
group | name_id
A | 01
A | 02
A | 03
A | 04
A | 05
A | 06
B | 07
B | 08
假设我想 SELECT 所有名称都属于 A 组。
我写了下面的代码:
SELECT name FROM tablea WHERE id = (SELECT name_id from tableb WHERE group = "A");
然而,结果只给我一行。
您必须使用 IN
而不是 =
SELECT name FROM tablea WHERE id IN (SELECT name_id from tableb WHERE group = "A");
对于您的示例数据,查询应该出错 - 因为子查询 returns 多于一行,这在此处是不期望的,因为您使用的是 =
.
如果 name_id
是 tableb
中的唯一列,则 join
是合适的:
select a.name
from tablea a
inner join tableb b on b.name_id = a.id
where b.group = 'A'
否则我推荐exists
:
select a.name
from tablea a
where exists (select 1 from tableb b where b.name_id = a.id and b.group = 'A')