select h1.id, h1.started_at, h1.runtime, h1.movie_nm, h1.rating_grade, h1.screen_name, h2.img_uname, h2.img_name, h2.name cinema_name
from
(
select t1.id, t1.started_at, t1.runtime, t1.movie_nm, t1.rating_grade, t2.cinema_id, t2.name screen_name
from
(
select st.id, st.screen_id, st.started_at, m.runtime, m.movie_nm, m.rating_grade from showtime_tb st
inner join movie_tb m on st.movie_id = m.id
where st.id = 1
) t1
inner join screen_tb t2 on t1.screen_id = t2.id
) h1 
inner join cinema_tb h2 on h1.cinema_id = h2.id
select u1.id, u1.col_num, u1.row_num, u1.stime, u1.movie_nm, u1.rating_grade, u1.name screen_name, u2.name cinema_name, u2.img_name, u2.img_uname
from
(
select h1.id, h1.col_num, h1.row_num, h1.showtime_id, h1.stime, h1.movie_nm, h1.rating_grade, h2.name, h2.cinema_id
from
(
select t1.id, t1.col_num, t1.row_num, t1.showtime_id, t1.stime, t2.movie_nm, t2.rating_grade
from
(
select s.id, s.col_num, s.row_num, s.showtime_id, st.movie_id mid, st.screen_id, st.started_at stime from seat_tb s 
inner join showtime_tb st on s.showtime_id = st.id
where s.showtime_id = 1
) t1
inner join movie_tb t2 on t1.mid = t2.id
) h1
inner join screen_tb h2 on h1.showtime_id = h2.id
) u1
inner join cinema_tb u2 on u1.cinema_id = u2.id;
select u1.id, u1.col_num, u1.row_num, u1.stime, u1.movie_nm, u1.runtime, u1.rating_grade, u1.name screen_name, u2.name cinema_name, u2.img_name, u2.img_uname
from
(
select h1.id, h1.col_num, h1.row_num, h1.showtime_id, h1.stime, h1.movie_nm, h1.runtime, h1.rating_grade, h2.name, h2.cinema_id
from
(
select t1.id, t1.col_num, t1.row_num, t1.showtime_id, t1.stime, t2.movie_nm, t2.runtime, t2.rating_grade
from
(
select s.id, s.col_num, s.row_num, s.showtime_id, st.movie_id mid, st.screen_id, st.started_at stime from seat_tb s 
inner join showtime_tb st on s.showtime_id = st.id
where s.showtime_id = 1
) t1
inner join movie_tb t2 on t1.mid = t2.id
) h1
inner join screen_tb h2 on h1.showtime_id = h2.id
) u1
inner join cinema_tb u2 on u1.cinema_id = u2.id;
select *
from
(
select st.id, st.movie_id, st.screen_id, st.started_at, s.col_num, s.row_num from showtime_tb st
inner join seat_tb s on s.showtime_id = st.id
where s.showtime_id = 1
) t1
inner join movie_tb t2 on t1.movie_id = t2.id;
select h1.id, h1.started_at, h1.runtime, h1.movie_nm, h1.rating_grade, h1.screen_name, h2.img_uname, h2.img_name, h2.name cinema_name
from
(
select t1.id, t1.started_at, t1.runtime, t1.movie_nm, t1.rating_grade, t2.cinema_id, t2.name screen_name
from
(
select st.id, st.screen_id, st.started_at, m.runtime, m.movie_nm, m.rating_grade from showtime_tb st
inner join movie_tb m on st.movie_id = m.id
where st.id = 1
) t1
inner join screen_tb t2 on t1.screen_id = t2.id
) h1 
inner join cinema_tb h2 on h1.cinema_id = h2.id;
// 전체 좌석 수 제외하고 필요한 것
select u1.id, u1.col_num, u1.row_num, u1.stime, u1.movie_nm, u1.runtime, u1.rating_grade, u1.name screen_name, u2.name cinema_name, u2.img_name, u2.img_uname
from
(
select h1.id, h1.col_num, h1.row_num, h1.showtime_id, h1.stime, h1.movie_nm, h1.runtime, h1.rating_grade, h2.name, h2.cinema_id
from
(
select t1.id, t1.col_num, t1.row_num, t1.showtime_id, t1.stime, t2.movie_nm, t2.runtime, t2.rating_grade
from
(
select s.id, s.col_num, s.row_num, s.showtime_id, st.movie_id mid, st.screen_id, st.started_at stime from seat_tb s 
inner join showtime_tb st on s.showtime_id = st.id
where s.showtime_id = 1
) t1
inner join movie_tb t2 on t1.mid = t2.id
) h1
inner join screen_tb h2 on h1.showtime_id = h2.id
) u1
inner join cinema_tb u2 on u1.cinema_id = u2.id;
select *
from
(
select st.id, st.movie_id, st.screen_id, st.started_at, s.col_num, s.row_num from showtime_tb st
inner join seat_tb s on s.showtime_id = st.id
where s.showtime_id = 1
) t1
inner join movie_tb t2 on t1.movie_id = t2.id;
// 전체 좌석 수 포함
SELECT u1.id, u1.col_num, u1.row_num, u1.stime, u1.movie_nm, u1.runtime, u1.rating_grade, u1.name  AS screen_name, u2.name AS cinema_name, u2.img_name, u2.img_uname, 
    -- 전체 좌석 수
    (SELECT count(col_num) 
     FROM SEAT_TB 
     WHERE showtime_id = u1.showtime_id) AS total_seat_num,
     
    -- 남은 좌석 수
    ((SELECT count(col_num) 
      FROM SEAT_TB 
      WHERE showtime_id = u1.showtime_id)
     -
     (SELECT count(seat_id) 
      FROM ticket_tb 
      WHERE showtime_id = u1.showtime_id)) AS available_seat_num
FROM
(
    SELECT 
        h1.id, 
        h1.col_num, 
        h1.row_num, 
        h1.showtime_id, 
        h1.stime, 
        h1.movie_nm, 
        h1.runtime, 
        h1.rating_grade, 
        h2.name, 
        h2.cinema_id
    FROM
    (
        SELECT 
            t1.id, 
            t1.col_num, 
            t1.row_num, 
            t1.showtime_id, 
            t1.stime, 
            t2.movie_nm, 
            t2.runtime, 
            t2.rating_grade
        FROM
        (
            SELECT 
                s.id, 
                s.col_num, 
                s.row_num, 
                s.showtime_id, 
                st.movie_id AS mid, 
                st.screen_id, 
                st.started_at AS stime 
            FROM seat_tb s 
            INNER JOIN showtime_tb st 
            ON s.showtime_id = st.id
            WHERE s.showtime_id = 1
        ) t1
        INNER JOIN movie_tb t2 
        ON t1.mid = t2.id
    ) h1
    INNER JOIN screen_tb h2 
    ON h1.showtime_id = h2.id
) u1
INNER JOIN cinema_tb u2 
ON u1.cinema_id = u2.id;
필요한 데이터를 가지고 오기 위해 네이티브 쿼리를 먼저 작성해 보았다.

여러번 조인해서 좌석 페이지에 필요한 데이터를 가지고 왔다.

전체 쿼리는 이렇게 생겼다.
Share article