반응형
내 원래 쿼리는 JOIN이 아닌 WHERE 절을 사용하여 조인을 수행하고 있습니다. 스타가없는 영화 나 장르가 나오지 않는 것이 돌아온다는 것을 깨달았 기 때문에 모든 영화를보기 위해서는 LEFT JOIN을해야한다고 생각합니다. 내 원래 SQL은 다음과 같습니다.
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
WHERE m.id = sm.movie_id
AND sm.star_id = s.id
AND gm.genre_id = g.id
AND gm.movie_id = m.id
AND m.title LIKE '%the%'
AND s.first_name LIKE '%Ben%'
ORDER BY m.title ASC
LIMIT 5;
영화에서 LEFT JOIN을하려고했는데 확실히 뭔가 잘못하고 있습니다.
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
LEFT JOIN movies m1 ON m1.id = sm.movie_id
LEFT JOIN movies m2 ON m2.id = gm.movie_id
AND sm.star_id = s.id
AND gm.genre_id = g.id
ORDER BY m.title ASC
LIMIT 5;
나는 ERROR 1054 (42S22) : 'on clause'에 알 수없는 열 'sm.movie_id'
가 표시됩니다. 너무 명확하게 조인을 잘못 수행하고 있습니다.
해결 방법
그러나 쉼표 연산자의 우선 순위는 INNER JOIN, CROSS JOIN, LEFT JOIN 등보다 적습니다. 조인 조건이있을 때 쉼표 조인을 다른 조인 유형과 혼합하면
'on clause'에서 알 수없는 열 'col_name'
형식의 오류가 발생할 수 있습니다. 이 문제를 처리하는 방법에 대한 정보는이 섹션의 뒷부분에서 제공됩니다.
대신 이것을 시도하십시오.
SELECT *
FROM movies m
LEFT JOIN (
stars s
JOIN stars_in_movies sm
ON sm.star_id = s.id
) ON m.id = sm.movie_id AND s.first_name LIKE '%Ben%'
LEFT JOIN (
genres g
JOIN genres_in_movies gm
ON gm.genre_id = g.id
) ON gm.movie_id = m.id
WHERE m.title LIKE '%the%'
ORDER BY m.title ASC
LIMIT 5;
참조 페이지 https://stackoverflow.com/questions/7780890
반응형
'MySql' 카테고리의 다른 글
MySQL / 쓰기 파일 오류 (Errcode 28) (0) | 2020.09.29 |
---|---|
MySQL PHP에서 mysql_num_rows인지 묻는 적절한 방법 (0) | 2020.09.28 |
MySQL 스트림을 열지 못했습니다. 해당 파일 또는 디렉토리가 없습니다. (0) | 2020.09.28 |
MySQL Where can I find the list of SQLException error codes for MySQL? (0) | 2020.09.28 |
MySQL PHP 배열을 통해 여러 행을 mysql에 삽입 (0) | 2020.09.28 |
댓글