Mysql 如何查询具有3个不同表的SQL数据库,其中包含有关参与者、角色和执行的角色的信息?
数据库包含有关参与者、角色和执行的角色的信息Mysql 如何查询具有3个不同表的SQL数据库,其中包含有关参与者、角色和执行的角色的信息?,mysql,sql,group-by,Mysql,Sql,Group By,数据库包含有关参与者、角色和执行的角色的信息 Actor(actor_id, name, year_born) Play(play_id, title, author, year_written) Role(actor_id, character_name, play_id) 为什么这些尝试是错误的 要做: SQL查询,返回1980年出生并在5部以上戏剧中演出的演员的姓名。 2.SQL查询,返回在作者“Arthur Miller”编写的所有剧本中扮演的演员的姓名 我对问题1的尝试 Sele
Actor(actor_id, name, year_born)
Play(play_id, title, author, year_written)
Role(actor_id, character_name, play_id)
为什么这些尝试是错误的
要做:
Select DISTINCT a.name
From Actor a , Role r , Play p
Where a.year_born = 1980
HAVING count(DISTINCT r.play_id) > 5
我对问题2的尝试
SELECT DISTINCT a.name
From Actor a , Role r , Play p
Where p.author = “Arthur Miller” AND p.play_id=r.play_id and r.actor_id = a.actor_id
HAVING count (DISTINCT a.actor_id = p.play_id)
在这两个查询中,您都缺少GROUPBY子句。而且,由于您在选择列表中使用的是GROUPBY distinct关键字,所以不需要 问题1:
Select a.name
From Actor a inner join Role r on a.actor_id=r.actor_id
Where a.year_born = 1980
Group by a.name
HAVING count(DISTINCT r.play_id) > 5
问题2:
SELECT a.name
From Actor a inner join Role r
on r.actor_id = a.actor_id
inner join Play p
on p.play_id=r.play_id
Where p.author = 'Arthur Miller'
group by a.name
HAVING count (distinct p.play_id) =(select count(*) from Play where author = 'Arthur Miller' )
你必须先加入表格 例如: 注意*由于角色表包含actor_id和play_id,因此我将角色表作为基表
select a.name
from role as r
inner join actor as a On a.actor_id = r.actor_id
inner join play as p On r.play_id = p.play_id
where p.author = "Arthur Miller”