1. 程式人生 > >More JOIN operations/zh 答案

More JOIN operations/zh 答案

SELECT id, title
FROM movie
WHERE yr=1962
SELECT yr
FROM movie
WHERE title LIKE 'Citizen Kane%' 
SELECT id, title, yr
FROM movie
WHERE title LIKE 'Star Trek%' 
SELECT title
FROM movie
WHERE id IN (11768, 11955, 21191)
SELECT id
FROM actor
WHERE name LIKE 'Glenn Close'
SELECT id
FROM movie
WHERE
title LIKE 'Casablanca'
SELECT name 
FROM actor
WHERE id IN (
  SELECT actorid
  FROM movie m JOIN casting c ON m.id = c.movieid
  WHERE id = 11768)
SELECT name 
FROM actor
WHERE id IN (
  SELECT actorid
  FROM movie m JOIN casting c ON m.id = c.movieid
  WHERE id = (
    SELECT id
    FROM movie
    WHERE
title LIKE 'Alien'))
SELECT title
FROM movie m JOIN casting c ON (m.id= c.movieid)
WHERE c.actorid IN(
  SELECT id 
  FROM actor
  WHERE name = 'Harrison Ford')
SELECT title
FROM movie m JOIN casting c ON (m.id= c.movieid)
WHERE c.ord != 1 AND c.actorid IN(
  SELECT id 
  FROM actor
  WHERE name =
'Harrison Ford')
SELECT m.title, a.name
FROM casting c 
JOIN movie m ON (m.id= c.movieid)
JOIN actor a ON (a.id= c.actorid)
WHERE c.ord = 1 AND yr = 1962
SELECT yr, COUNT(title) 
FROM movie 
JOIN casting ON movie.id=movieid
JOIN actor ON actorid=actor.id
WHERE name='John Travolta'
GROUP BY yr HAVING COUNT(title)=(
  SELECT MAX(c) FROM (
    SELECT yr,COUNT(title) AS c 
    FROM movie 
    JOIN casting ON movie.id=movieid
    JOIN actor   ON actorid=actor.id
    WHERE name='John Travolta'
    GROUP BY yr) AS t)
SELECT yr, COUNT(title)
FROM casting c 
JOIN movie m ON (m.id= c.movieid)
JOIN actor a ON (a.id= c.actorid)
WHERE name = 'John Travolta'
GROUP BY yr
ORDER BY COUNT(title) DESC LIMIT 1;

參考連結

SELECT title, name /* 電影名稱 及 其第1主角*/
FROM casting c 
JOIN movie m ON (m.id= c.movieid)
JOIN actor a ON (a.id= c.actorid)
WHERE c.ord = 1 AND c.movieid IN (
  SELECT movieid /*Julie Andrews 參加過的電影, 需要獲取到 movieid */
  FROM casting c 
  JOIN movie m ON (m.id= c.movieid)
  JOIN actor a ON (a.id= c.actorid)
  WHERE name = 'Julie Andrews')
SELECT DISTINCT(name) /* DISTINCT 去重:可以考慮使用LEFT JOIN的方法 */
FROM casting c 
JOIN movie m ON (m.id= c.movieid)
JOIN actor a ON (a.id= c.actorid)
WHERE c.actorid IN (
  SELECT actorid  /* 獲取30次第1主角 */
  FROM casting c
  WHERE ord = 1
  GROUP BY actorid  /* GROUP BY + COUNT 統計次數 */
  HAVING COUNT(ord) >= 30)  /* HAVING 獲取大於30的次數 */
/* 不知道為什麼失敗了 */
SELECT title, name_sum
FROM movie m
JOIN (
  SELECT movieid,count(name) as name_sum /* 首先製作movieid和角色數目的表 */
  FROM casting c 
  JOIN movie m ON (m.id= c.movieid)
  JOIN actor a ON (a.id= c.actorid)
  WHERE yr = 1978
  GROUP BY movieid) b
WHERE m.id = b.movieid
ORDER BY name_sum DESC
SELECT title, COUNT(actorid) FROM movie JOIN casting ON movie.id=movieid
WHERE yr = 1978
GROUP BY movieid, title
ORDER BY COUNT(actorid) DESC,title 
  1. 列出曾與演員亞特·葛芬柯’Art Garfunkel’合作過的演員姓名。
SELECT DISTINCT(name) /* 2. 找到這些作品*/
FROM casting c 
JOIN movie m ON (m.id= c.movieid)
JOIN actor a ON (a.id= c.actorid)
WHERE name != 'Art Garfunkel' AND m.id IN ( 
  SELECT movieid /* 找到所有 Art Garfunkel 演過的作品*/
  FROM casting c 
  JOIN movie m ON (m.id= c.movieid)
  JOIN actor a ON (a.id= c.actorid)
  WHERE name = 'Art Garfunkel')