Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查询具有3个不同表的SQL数据库,其中包含有关参与者、角色和执行的角色的信息?_Mysql_Sql_Group By - Fatal编程技术网

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)
为什么这些尝试是错误的

要做:

  • SQL查询,返回1980年出生并在5部以上戏剧中演出的演员的姓名。 2.SQL查询,返回在作者“Arthur Miller”编写的所有剧本中扮演的演员的姓名
  • 我对问题1的尝试

    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”