2011-05-09 2 views
3

나는이 쿼리와 다른 한 테이블에서 일부 레코드를 복사MySQL은 삭제 선택과 같은 동일 (가입)

delete from pages_done o 
where (select count(*) as totalPages from pages_done x where x.keyword = o.keyword)-1 = pages 

그러나 간단하지는 않습니다. 누구나 저에게 올바른 방법이 무엇인지 말해 줄 수 있습니까?

@bgdrl 대답 후, 나는 단지 선택을 실행하는 것에 대해 생각하고 있어요 복사해야하는 모든 레코드의 ID를 얻으십시오. ; 하지만 더 쉬운 해결책이 있어야한다고 생각합니다.

표시된 @bgdrl이 옳은 대답으로 대답하더라도, 그것은 단지 사실 때문입니다.

내가하고 결국 무엇에 관심있는 사람들을하려면

: 내가 시작 동일을 선택 않았다 (모든 열을 선택하면 불쌍한 내 컴퓨터를 죽인 것 때문에 만이, 오직 id 컬럼을 선택), 는 INSERT STATMENTS에 수출 (mysqlworkbench를 사용하여) 의 텍스트 파일을 메모장에 열어 INSERT INTO ...을 DELETE FROM WHERE ID=, 으로 바꾼 다음 mysql에서 해당 쿼리를 실행하십시오.

나는이 방법으로 너무 바보 같지만 분명히 다른 선택은 없었습니다.

+0

왜 LAST_INSERT_ID()만이 하나의 값을 반환하기 때문에 mysql'LAST_INSERT_ID()' – diEcho

+1

@diEcho로 이것을 처리하지 않은 반면 INSERT 문은 많은 행을 삽입 할 수 있습니다. –

답변

0

다음 단계를 수행하기 전에 표를 백업하십시오.

은 다음 단계를 수행

STEP 1

CREATE TABLE pages_done_ids 
    SELECT o.id FROM pages_done AS o 
    WHERE 
    (
     SELECT count(*) AS totalPages 
     FROM pages_done AS x 
     WHERE x.keyword = o.keyword 
    )-1 = o.pages 

STEP 2

DELETE FROM pages_done AS o 
WHERE o.id IN (SELECT id FROM pages_done_ids) 

STEP 3

DROP TABLE pages_done_ids; 

보통 하나의 거래로 TEMPORARY TABLES을 사용하면됩니다.

해피 쿼리!

+0

이것은 훌륭한 아이디어입니다! – Dementic

+0

SQL을 확인하고 방금 맹목적으로 작성했습니다. 조금 수정하면 – Igor

+0

이 필요했습니다. :) 감사합니다! – Dementic

2

mysql 사이트에서 : "테이블을 수정하고 하위 쿼리의 동일한 테이블에서 선택할 수 없습니다. 이것은 DELETE, INSERT, REPLACE, UPDATE와 같은 명령문에 적용됩니다." http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

+1

ok bgdrl 알아두면 좋지만 아직 해결책이 필요합니다. 누군가이 아이디어에 어떻게 접근해야합니까? – Dementic

+0

왜이 조건이 필요합니까? where x.keyword = o.keyword) -1 = 페이지. 무엇을 필터링하려고합니까? – dabuno

+0

기본적으로 특정 키워드의 총 행 수를 비교하여 일치해야하는 pages 열과 비교합니다. 행에 페이지 번호가 포함되어 있기 때문에 -1입니다. – Dementic