2011-04-21 195 views
0

我有一個SQL查詢的問題。假設我們有:簡單的SQL查詢

cinema 
    name 
    id_cinema 
    cinema 
    city 

movies 
    id_movie 
    name_movie 

假設:

  • 電影可以在更多的影院中可以看出;
  • 在電影院裏你可以看到不同的電影;

我有一個類型的表之間的關係:多對多。因此,其具有主鍵id_cinemaid_filmcinema-movie我需要。

是否有一個SQL查詢,讓我在電影院所有的電影?

回答

2

查詢將

select m.* from movies m left join cinema_movie mc on m.id = mc.movie_id where mc.cinema_id = 1; 

E.g.

mysql> select * from movies; 
+------+--------+ 
| id | name | 
+------+--------+ 
| 1 | movie1 | 
| 2 | movie2 | 
| 3 | movie3 | 
| 4 | movie4 | 
+------+--------+ 
4 rows in set (0.00 sec) 

mysql> select * from cinema; 
+------+-------+---------+ 
| id | name | cinema | 
+------+-------+---------+ 
| 1 | name1 | cinema1 | 
| 2 | name2 | cinema2 | 
| 3 | name3 | cinema3 | 
| 4 | name4 | cinema4 | 
+------+-------+---------+ 
4 rows in set (0.00 sec) 

mysql> select * from cinema_movie; 
+----------+-----------+ 
| movie_id | cinema_id | 
+----------+-----------+ 
|  1 |   1 | 
|  3 |   1 | 
|  4 |   1 | 
|  1 |   3 | 
|  3 |   3 | 
+----------+-----------+ 
5 rows in set (0.00 sec) 

mysql> select m.* from movies m left join cinema_movie mc on m.id = mc.movie_id where mc.cinema_id = 1; 
+------+--------+ 
| id | name | 
+------+--------+ 
| 1 | movie1 | 
| 3 | movie3 | 
| 4 | movie4 | 
+------+--------+ 
3 rows in set (0.00 sec) 
+0

的'左join'沒用這個'where'條款。內部連接就足夠了 - 並且會得到相同的結果。 – 2011-04-21 13:17:32

2

顯示從電影院10的所有電影:

SELECT movies.* 
FROM movies 
JOIN cinema_movie ON cinema_movie.id_film = movies.id_movie 
WHERE cinema_movie.id_cinema = 10 

隨着JOIN這樣的(內部連接),你可以從movies選擇並加入cinema_movie,反之亦然 - 順序並不重要。

1

查詢與電影信息:

select * from movies as m 
join cinema_movie as cm 
on m.id_movie = cm.id_movie 
join cinema as c 
on c.id_cinema = cm.id_cinema 
where c.id_cinema = <your id_cinema> 
1

如果您有:

cinema 
    name 
    id_cinema 
    cinema 
    city 

movies 
    id_movie 
    name_movie 

cinema_movie 
    id_cinema 
    id_movie 
    start_time 

然後你就可以參加由:

SELECT cinema_movies.id_cinema, name, cinema, cinema_movies.id_movie, name_movie 
FROM cinema, movies, cinema_movies 
WHERE cinema.id_cinema = cinema_movies.id_cinema 
    AND movies.id_movie = cinema_movies.id_movie 
    AND cinema_movies.id_cinema = 'northpark12' 
1

如果您想通過cinema.name到SEACH:

SELECT cinema.name 
    , movies.* 
FROM movies 
    INNER JOIN cinema_movie 
    ON cinema_movie.id_film = movies.id_movie 
    INNER JOIN cinema 
    ON cinema_movie.id_cinema = cinema.id_cinema 
WHERE cinema.name = "YourCinemaName" 

如果你想通過id_cinema搜索:如果您想搜索特定cinema.id

SELECT cinema.name 
    , movies.* 
FROM movies 
    INNER JOIN cinema_movie 
    ON cinema_movie.id_film = movies.id_movie 
    INNER JOIN cinema 
    ON cinema_movie.id_cinema = cinema.id_cinema 
WHERE cinema.id_cinema = YourCinemaID 

和你不想輸出電影的名字,Box9的答案就夠了。

+0

第一個查詢(按cinema.name搜索)是否正確? – Safari 2011-04-21 14:02:24

+0

@GgSalent:不,現在糾正。 – 2011-04-21 14:12:31

+0

我使用Microsoft Access ...與您通過名稱查詢我有sintax錯誤...爲什麼? (PS:what'is連接類型(內部,左...)我可以有後,一些參加由運營商 – Safari 2011-04-21 15:22:53