MySQL Left JOIN으로 별칭을 사용하는 방법
JOIN이 아닌 WHERE 절을 사용하여 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;
영화에 레프트조인을 하려고 했는데 분명히 잘못하고 있어요.
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): Unknown column 'sm.movie_id' in 'on clause'
내가 가입을 잘못한 게 분명해요 그게 뭔지 모르겠어요
쉼표 연산자를 다음과 섞지 마십시오.JOIN
- 그들은 다른 우선순위를 가지고 있습니다!설명서에는 이에 대한 경고도 나와 있습니다.
그러나 쉼표 연산자의 우선 순위는 INNER JOIN, CROSS JOIN, LEFT JOIN 등보다 작습니다.조인 조건이 있을 때 쉼표 조인을 다른 조인 유형과 혼합하면 양식의 오류가 발생합니다.
Unknown column 'col_name' in 'on clause'
발생할 수 있습니다.이 문제 처리에 대한 자세한 내용은 이 섹션의 뒷부분에 나와 있습니다.
대신 이 방법을 사용해 보십시오.
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;
JOIN과 관련된 조건을 동일한 ON 조항에 넣어야 합니다.그러나 위의 문제에 대해서는 다음 쿼리를 사용해야 합니다.
SELECT *
FROM movies m
LEFT JOIN stars_in_movies sm ON sm.movie_id = m.id
JOIN stars s ON sm.star_id = s.id
LEFT JOIN genres_in_movies gm ON gm.movie_id = m.id
JOIN genres g ON gm.genre_id = g.id
ORDER BY m.title ASC
LIMIT 5;
사람들은 이것이 해킹이라고 경고합니다.
SELECT *
FROM movies m, stars_in_movies sm
LEFT JOIN movies m1
ON m1.id = sm.movie_id
, stars s
ORDER BY m.title ASC
LIMIT 5;
비교하려는 열이 있는 오른쪽 표로 조인합니다.
언급URL : https://stackoverflow.com/questions/7780890/how-to-use-aliases-with-mysql-left-join
'programing' 카테고리의 다른 글
재귀적 CTE를 사용하여 레코드가 다른 레코드의 후손인지 확인 (0) | 2023.09.09 |
---|---|
jQuery ajax 호출에서 응답 시간을 얻으려면 어떻게 해야 합니까? (0) | 2023.09.09 |
SQL 쿼리는 'like'와 함께 작동하지만 일부 ID의 경우 동등하지 않습니다. (0) | 2023.09.09 |
npm에서 패키지를 찾을 수 없습니다.json (0) | 2023.09.09 |
Set-Execution Policy가 금지된 경우에도 PowerShell 스크립트를 실행하려면 어떻게 해야 합니까? (0) | 2023.09.09 |