2010-05-31 4 views
0

가 여기에 문 모습 내용은 다음과 같습니다.다른 쿼리 결과에 필드가있는 mysql 테이블의 행을 어떻게 삭제합니까?

DELETE FROM videoswatched vw2 
WHERE vw2.userID IN (SELECT vw.userID 
         FROM videoswatched vw 
         JOIN users u ON vw.userID=u.userID 
         WHERE u.companyID = 1000 
        GROUP BY userID) 

나에게 괜찮은 보이는, 그리고 SELECT 문이 단일 열 '아이디'와 열을 생산하는 (자체에서 작동 기본적으로

, 내가 원하는 사용자가 테이블에 가입 한 후 videoswatched 항목의 userID에 companyID = 1000이라는 항목이있는 'videoswatched'테이블의 항목을 삭제하십시오.

SQL 구문에서 오류가 발생하지 않으면 어떻게해야합니까? 오류가 발생했습니다.

라인 1.

+0

별칭을 할당 할 이유가 없으므로 vw2를 제거하고 비디오를 사용자 ID로 지정합니다. IN –

+0

오류와 관련이 없지만 GROUP BY userID가 불필요하게 보입니다. –

답변

1

그것은 이미 코멘트에 대한 답이에: 당신은 테이블 별칭을 제거해야, 그것은 MySQL's DELETE statement syntax에서 허용되지 않습니다 (그리고이 필요 하나, 없음).

편집 : BTW,이 (메모리에서 코딩, 잘못 될 수 있음)하십시오 : 당신이 테이블에 대한 별명을 선언하면

DELETE vw.* 
FROM videoswatched vw 
INNER JOIN users u ON vw.userID = u.userID 
WHERE u.companyID = 1000; 
+0

많은 감사합니다! "INNER JOIN"에서 'INNER'를 제거하는 유일한 조정은 삭제에서 유용하다고 생각하지 않는 것입니다. – gsquare567

+0

@gsquare - INNER JOIN과 JOIN은 같은 것입니다. 지정하지 않으면 JOIN의 기본값은 INNER입니다. – mdma

0

MySQL manual

을 말한다, 을 표로 사용할 때 별칭을 사용해야합니다.

가 T1 AS 테스트 FROM T1을 삭제, TEST2 WHERE ... 그래서

, 당신은

DELETE vm2 FROM videoswatched vw2 WHERE vw2.userID IN (
SELECT vw.userID FROM videoswatched vw 
JOIN users u 
ON vw.userID=u.userID 
WHERE u.companyID=1000 
GROUP BY userID 
) 

을 시도 할 수 그러나 코멘트에 언급 한 바와 같이 단순히 별명

DELETE FROM videoswatched WHERE userID IN (
SELECT vw.userID FROM videoswatched vw 
JOIN users u 
ON vw.userID=u.userID 
WHERE u.companyID=1000 
GROUP BY userID 
) 
멀리 할 수있는
관련 문제