code

MySQL-이 버전의 MySQL은 아직 'LIMIT & IN / ALL / ANY / SOME 하위 쿼리를 지원하지 않습니다.

codestyles 2020. 10. 13. 07:50
반응형

MySQL-이 버전의 MySQL은 아직 'LIMIT & IN / ALL / ANY / SOME 하위 쿼리를 지원하지 않습니다.


이것은 내가 사용하는 코드입니다

    $Last_Video         = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5)
    ORDER BY RAND()
    LIMIT 1
');

이것은 나에게주는 오류입니다.

 Message:   Error during SQL execution: SELECT VID, thumb FROM video WHERE VID IN ( SELECT VID FROM video WHERE title LIKE "%funny%" ORDER BY viewtime DESC LIMIT 5) ORDER BY RAND() LIMIT 1<br />
 MySQL Error:   This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'<br />
MySQL Errno:    1235

이 문제를 어떻게 해결할 수 있습니까? 그것을 만드는 다른 방법 ... 그래서 나는 오류가 발생하지 않습니다 ...


IN을 사용하는 대신 JOIN을 사용할 수 있습니다.

SELECT v.VID, v.thumb
FROM video AS v
INNER JOIN
     (SELECT VID
     FROM video
     WHERE title LIKE "%'.$Channel['name'].'%"
     ORDER BY viewtime DESC
     LIMIT 5) as v2
  ON v.VID = v2.VID
ORDER BY RAND()
LIMIT 1

아래를 사용하여이 오류를 우회 할 수 있습니다.

$Last_Video = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (select * from (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5) temp_tab)
    ORDER BY RAND()
    LIMIT 1
');

여기에는 하위 쿼리가 필요하지 않습니다. 이 시도:

 SELECT VID, thumb
 FROM video
 WHERE title LIKE "%'.$Channel['name'].'%"
 ORDER BY RAND() DESC
 LIMIT 1

MySQL 5.0.26 이상에서는 오류가 발생합니다.

MySQL은 특정 하위 쿼리 연산자에 대한 하위 쿼리에서 LIMIT를 지원하지 않습니다.

참조 .


왜 단순을 사용할 수 없습니까?

SELECT v.VID, v.thumb
FROM video as v
WHERE title LIKE "%'.$Channel['name'].'%"
ORDER BY viewtime DESC
LIMIT 5

여기서 하위 쿼리는 무엇입니까?

참고 URL : https://stackoverflow.com/questions/17892762/mysql-this-version-of-mysql-doesnt-yet-support-limit-in-all-any-some-subqu

반응형