2016-06-12 1 views
0

답변을 찾았지만 DELETE 대신 SELECT를 참조하고이 문맥에서 주어진 대답을 구현하는 방법을 모르겠습니다.mysql 모든 파생 테이블에 DELETE 쿼리에 대한 고유 별칭이 있어야합니다.

아래의 쿼리를 사용하여 최근 10 개의 최근 값 (id_lv에 의해 정의 됨)을 제외하고 모두 삭제하지만 한 명의 사용자 만 삭제하려고합니다.

DELETE FROM last_viewed 
    WHERE id_lv <= (
    SELECT id_lv 
    FROM (
     SELECT id_lv 
     FROM last_viewed 
     WHERE user_id_lv = '$user_id' 
     ORDER BY id_lv DESC 
     LIMIT 1 OFFSET 10 
    ) 
) 

내가 그것을 실행하면 나는 당신이 (가) DELETE 문의 서브 쿼리에 의해 사용 된 파생 테이블에 별칭을 사용해야합니다 Every derived table must have its own alias

+1

[가능한 모든 복제 테이블에는 고유 한 alia가 있어야합니다 s] (http://stackoverflow.com/questions/1888779/every-derived-table-must-have-its-own-alias) –

+0

@MattRaines 나는 similair 질문을 찾았다 고 언급했지만 어떻게 적용해야할지 확신이 서지 않았다. 그것보다는 선택을 삭제하기 위해 – tatty27

답변

1

를 얻을 : 테이블

DELETE FROM last_viewed 
    WHERE id_lv <= (
    SELECT id_lv 
    FROM (
     SELECT id_lv 
     FROM last_viewed 
     WHERE user_id_lv = '$user_id' 
     ORDER BY id_lv DESC 
     LIMIT 1 OFFSET 10 
    ) AS t -- You need an alias here 
) 
+0

완벽 해! – tatty27

1

사용 및 별명 (FROM)

DELETE FROM last_viewed 
    WHERE id_lv in (
    SELECT t.id_lv 
    FROM (
     SELECT id_lv 
     FROM last_viewed 
     WHERE user_id_lv = '$user_id' 
     ORDER BY id_lv DESC 
     LIMIT 10 
    ) as t 
) 
관련 문제