2014-01-16 4 views
1

테이블 구조mysql에서 여러 행을 삭제하는 방법은 무엇입니까?

------------ 
Transaction 
------------ 
id  INT PrimaryKey 
user_id INT ForeignKey 
amount INT 

------------ 
User 
------------ 
id  INT PrimaryKey 
number INT 

트랜잭션 테이블은 프로그램
인해 일부 버그 (모든 사용자에 대해 동일하지 않다)의 행 수가 User.number에 저장된 각 사용자의 복수의 열을 포함 일부 여분 행 증가 된 User.number없이 트랜잭션 테이블에서 생성되었습니다.
이제 트랜잭션 테이블에서 추가 행을 제거해야합니다.

은 내가 아는 한, 내가 단일 SQL 쿼리에서 서로 다른 사용자에 대한 행의 변수 번호를 삭제하는 방법은 없나요

DELETE * from Transaction ORDER BY id DESC LIMIT 10; 

실행할 수있는 트랜잭션 테이블에서 마지막 10 개 행을 제거하려면?

+0

글쎄, 내가 여기에 뭔가를 놓칠 수 있지만 usernumber없는 것들이 문제가 있다면, 왜 당신은 usernumber없이 것들을 삭제하지 ??? –

+0

귀하의 질문을 정확히 이해할 경우 트랜잭션 테이블에 5 개에서 8 개까지의 트랜잭션이있는 데이터베이스의 사용자가 있습니다. 트랜잭션 테이블에서 제거해야하는 행을 어떻게 알 수 있습니까? 가장 높은 ID를 가진 사람입니까? – scraatz

+0

아, 그리고 SomeTable Limit 10에서 Delete *를하려고한다면 거기에 주문하세요. –

답변

1

당신은 할 수 있습니다 추가 트랜잭션을 제거하기 위해 SQL 스크립트를 생성하여 :

당신이 사용자 찾을 수 있어야합니다

:

SELECT user.id AS user_id, COUNT(transaction.id)-user.number AS num_trans FROM user, transaction WHERE user.id=transaction.user_id GROUP BY user.id, user.number HAVING user.number < COUNT(transaction.id) 

이 select 문에서보기 만들기를 :

CREATE VIEW invalidusers AS 
SELECT user.id AS user_id, COUNT(transaction.id)-user.number AS num_trans FROM user, transaction WHERE user.id=transaction.user_id GROUP BY user.id, user.number HAVING user.number < COUNT(transaction.id) 

이보기의 출력을 확인하십시오.

지금이보기에서 실행하는 스크립트를 선택합니다

SELECT CONCAT('DELETE * FROM transaction WHERE user_id=', CONVERT(user_id, CHAR), ' ORDER BY id DESC LIMIT ', CONVERT(num_trans, CHAR), ';') AS CMD from invalidusers 

마지막 명령은 모든 사용자에 대해 트랜잭션을 제거하기 위해 실행할 수있는 스크립트를 생성합니다.

관련 문제