2016-12-07 1 views
0

가지 치기 프로세스의 일부로 더 이상 사용되지 않는 테이블에서 데이터를 삭제하려고합니다. 결과 (표 Res)가있는 검색 작업 (표 검색)이 있고 사람들은 이메일을 통해 검색 결과 (표 Abo)를 수신합니다. 모든 보너스에 대해 이메일을 통해 전송 된 마지막 결과는 "last_result"열에 저장됩니다.다른 테이블에서 조회를 사용하여 하나의 테이블에서 삭제

내가 원하는 작업 : 모든 검색 작업에 대해 사용자에게 전송 된 모든 결과를 삭제하려고합니다.

이 구조의 단순화 된 변형입니다 : 나는 모든 "검색"값에 대해

DELETE r 
FROM Res r 
JOIN Abo a ON r.search = a.search 
WHERE 
    r.id < min(a.last_res) 

:

http://sqlfiddle.com/#!9/5ef8a3

Abo 
--- 

user search last_result 
A  1   100 
B  1   200 
C  2   50 
D  3   100 

Res 
--- 

id  search 
50  1   <---- this should be deleted 
300  1 
51  2 

Search 
------ 

1 
2 
3 

내가하려고 어떤 일이 같은 것입니다 "Abo"테이블의 "last_res"필드 아래에있는 모든 결과 ("Res")를 삭제하려고합니다.

+0

'r.search = a.search'가있는 두 개의 테이블에는 행이 없습니다. 그것들이 들판에 합류하는 분야라고 확신합니까? – Barmar

+0

실수로 열을 바꿨습니다. –

답변

1

MIN(last_res)search으로 그룹화해야합니다. 이렇게하는 방법은 이것을 계산하는 하위 쿼리를 작성한 다음 해당 하위 쿼리와 조인하는 것입니다.

DELETE r 
FROM Res AS r 
JOIN (SELECT search, MIN(last_res) AS min_res 
     FROM Abo 
     GROUP BY search) AS a 
ON r.search = a.search AND r.id < a.min_res 
관련 문제