SQL Access - 仅限子查询

时间:2015-04-23 13:41:08

标签: sql ms-access limit

我正在尝试获取特定导演合作过的演员列表,以及这些演员从电影数据库中获取的电影列表。

SELECT DISTINCT A_First_Name, A_Last_Name, Film_Title
FROM 

  (SELECT * 
  FROM Actor, Film, Film_Actor_Director_Genre
  WHERE Actor.AID=Film_Actor_Director_Genre.AID
  AND Film.FID=Film_Actor_Director_Genre.FID)

WHERE A_First_Name IN 

  (SELECT A_First_Name
  FROM 

    (SELECT * 
    FROM Actor, Director, 
    Film_Actor_Director_Genre
    WHERE 
    Actor.AID=Film_Actor_Director_Genre.AID
    AND 
    Director.DID=Film_Actor_Director_Genre.DID)

  WHERE D_First_Name=[Director’s first name?]
  OR D_Last_Name=[Director’s last name?]);

假设我想知道导演D01使用的演员列表,示例结果如下:

Actor    Film
-----    ----
A01      F01
A01      F02
A01      F03
A01      F04
A02      F01
A02      F02
A02      F05
A02      F06
A03      F01
A04      F01
A04      F02
A04      F09
A05      F01
A05      F02
A06      F10
A07      F01
A07      F02
A07      F04
etc.     etc.

然而,由于D01的演员名单可能会非常长,我想只展示前5名演员(即在大多数电影中使用D01的演员)以及演员所有的电影。因此,我只想限制演员而不是电影。期望的结果是:

Actor    Film
-----    ----
A01      F01
A01      F02
A01      F03
A01      F04
A02      F01
A02      F02
A02      F05
A02      F06
A04      F01
A04      F02
A04      F09
A05      F01
A05      F02
A07      F01
A07      F02
A07      F04

我尝试在各种子查询中实现SELECT DISTINCT TOP 5语法,但它们返回了5个结果的奇怪组合,例如

Actor    Film
-----    ----
A01      F01
A01      F02
A02      F01
A02      F02
A06      F10

如何限制结果只显示使用过D01的前5位演员以及这些演员所扮演的所有电影?感谢您的时间,感谢我能得到的任何帮助!

2 个答案:

答案 0 :(得分:1)

我觉得这样的事情会起作用

$opts = array(
    'http' => array(
        'user_agent' => 'PHP libxml agent',
    )
);

$context = stream_context_create($opts);
libxml_set_streams_context($context);

没有能够测试查询的小技巧。应该工作!

答案 1 :(得分:1)

这是访问?

假设他的查询是正确的,你可以用一些更简单的东西替换限制(和拥有):

 select top 5 aid, count(*) as qty from film_actor_director_genre group by aid, did order by 2 desc

如果访问无法处理该order by子句,您可以将其切换回

 select top 5 aid, count(*) as qty from film_actor_director_genre group by aid, did order by count(*) desc