복붙노트

[SQL] MYSQL에서 하위 쿼리에서 LIMIT 키워드를 사용하는 대체

SQL

MYSQL에서 하위 쿼리에서 LIMIT 키워드를 사용하는 대체

나는 다음과 같은 열이있는 테이블 TEST가 :

code_ver (VARCHAR)
suite (VARCHAR)
date (DATE)

지금은 code_ver & code_ver NOT LIKE '% DevBld %'정렬 된 날짜를 기준으로 내림차순의 고유 한 값으로 10 개 행을 선택합니다.

그래서 나는 다음과 같은 쿼리를 썼다 :

select * 
  from test 
 where code_ver IN (select DISTINCT code_ver 
                      from test 
                     where code_ver NOT LIKE '%DevBld%' 
                     ORDER by date DESC LIMIT 10);

이 쿼리는 이상적으로 작동해야하지만 MySQL은 내 버전은 말한다 :

누군가가 나에게이 쿼리에 대한 대안을 제시 할 수 있습니까?

해결법

  1. ==============================

    1.당신이 점점 오류 때문에 MySQL을의 버전이 정확히되지 않습니다. 나는 모든 버전이를 지원 생각합니다. 당신은 ")"를 LIMIT 10 장소를 변경 한 후 배치해야합니다. 당신을 위해 작동하는지 알려주세요. 난 내에서 울부 짖는 소리 하나를 실행하고 그것을 작동합니다.

    당신이 점점 오류 때문에 MySQL을의 버전이 정확히되지 않습니다. 나는 모든 버전이를 지원 생각합니다. 당신은 ")"를 LIMIT 10 장소를 변경 한 후 배치해야합니다. 당신을 위해 작동하는지 알려주세요. 난 내에서 울부 짖는 소리 하나를 실행하고 그것을 작동합니다.

    EG

    SELECT * FROM test where name IN (
               SELECT DISTINCT name 
               FROM projects 
               WHERE name NOT LIKE "%DevBld%"  
               ORDER by date_created DESC
     ) LIMIT 10;
    

    업데이트 : 아래의 하나를 시도, 이런 식으로 순서가 작동합니다 :

     SELECT * FROM  automation.e2e_projects WHERE name IN (
           SELECT DISTINCT name 
           FROM automation.e2e_projects
           WHERE name NOT LIKE "%DevBld%"
     ) ORDER by date_created DESC LIMIT 10;
    
  2. ==============================

    2.Layke에 의해 제안 대답은 내 범위에서 잘못된 것입니다. 하위 쿼리에 제한을 사용하는 의도는 제한 기록에 이렇게 주요 쿼리 실행이 하위 쿼리에서 가져온 것입니다. 우리가 제한 외부를 유지한다면 그것은 부질 쓸모 제한한다.

    Layke에 의해 제안 대답은 내 범위에서 잘못된 것입니다. 하위 쿼리에 제한을 사용하는 의도는 제한 기록에 이렇게 주요 쿼리 실행이 하위 쿼리에서 가져온 것입니다. 우리가 제한 외부를 유지한다면 그것은 부질 쓸모 제한한다.

    MySQL이 지원 아직 하위 쿼리 제한하지 않기 때문에 다음과 같이 대신 당신은 가입 사용할 수 있습니다 :

           
        SELECT * FROM test
        JOIN 
        (
            SELECT DISTINCT code_ver 
            FROM test 
            WHERE code_ver NOT LIKE '%DevBld%' 
            ORDER BY date DESC LIMIT 10
        ) d
        ON test.code_ver
        IN (d.code_ver)
        ORDER BY xyz;
    
  3. ==============================

    3.파생 테이블에 하위 쿼리를 넣어 :

    파생 테이블에 하위 쿼리를 넣어 :

       SELECT test.*
         FROM test
    LEFT JOIN (SELECT DISTINCT code_ver
                 FROM mastertest
                WHERE code_ver NOT LIKE '%DevBld%'
                ORDER BY `date` DESC
                LIMIT 10) d
        USING (code_ver)
        WHERE d.code_ver IS NOT NULL;
    

    (당신은 또한 RIGHT 물론, 그 가입하고, 외부 WHERE 조건을 삭제할 수 있습니다.)

  4. ==============================

    4.당신은 또한 단지 하위 쿼리하기 전에 중 하나 개를 선택 추가 레이어를 추가하여, 동일한 쿼리를 사용할 수 있습니다. 그리고 그게 다야. 그것은 작동합니다.

    당신은 또한 단지 하위 쿼리하기 전에 중 하나 개를 선택 추가 레이어를 추가하여, 동일한 쿼리를 사용할 수 있습니다. 그리고 그게 다야. 그것은 작동합니다.

    select * from test 
    where code_ver IN (select * from (select DISTINCT code_ver 
                          from test 
                         where code_ver NOT LIKE '%DevBld%' 
                         ORDER by date DESC LIMIT 10) as t1);
    
  5. from https://stackoverflow.com/questions/12810346/alternative-to-using-limit-keyword-in-a-subquery-in-mysql by cc-by-sa and MIT license