2011-04-21 194 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