Простой SQL-запрос - PullRequest
       1

Простой SQL-запрос

0 голосов
/ 21 апреля 2011

У меня вопрос к запросу SQL.Предположим, у нас есть:

cinema
  name 
  id_cinema 
  cinema 
  city

movies
  id_movie 
  name_movie

Предположим, что:

  • фильм можно увидеть в большем количестве кинотеатров;
  • в кинотеатре вы можете смотреть разные фильмы;

У меня есть связь между таблицами типа: многие ко многим.Поэтому мне нужна таблица cinema-movie с первичными ключами id_cinema id_film.

Существует ли SQL-запрос, позволяющий мне показывать все фильмы в кинотеатре?

Ответы [ 5 ]

2 голосов
/ 21 апреля 2011

запрос будет

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

Е.Г.

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)
2 голосов
/ 21 апреля 2011

Показать все фильмы из кино 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 голос
/ 21 апреля 2011

Если вы хотите искать по cinema.name:

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:

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

Если вы хотите найти определенный кинотеатр.id и вы не хотите выводить название кинотеатра, достаточно ответа Box9.

1 голос
/ 21 апреля 2011

Если у вас есть:

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 голос
/ 21 апреля 2011

Запрос информации о кинотеатре:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...