2012-05-12 4 views
2

두 개의 테이블 product (product_id)와 sex (product_id, sex_id)가 있습니다. 나는이 product_id와 sex = 1을 가진 성 테이블에 행이 존재하도록 product_id를 가진 두 테이블의 행을 삭제하려고합니다.해당 SELECT가 작동 할 때 왜이 DELETE 쿼리가 실패합니까?

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NATURAL JOIN tempTable AS t' at line 2 

이 SELECT 쿼리가 잘 작동 : 지금까지 나는 DELETE 쿼리가이 오류가 발생합니다

CREATE TEMPORARY TABLE tempTable 
     SELECT p.product_id 
     FROM products AS p 
    INNER JOIN sex AS s 
      ON p.product_id = s.product_id 
     WHERE s.sex = 1; 

DELETE FROM products AS p 
NATURAL JOIN tempTable AS t 

SELECT * FROM products 
NATURAL JOIN tempTable 

왜 SELECT 쿼리 작업을 수행하지만, DELETE 쿼리 수행 아니?

+0

중 하나가 내가 더 MySQL의 전문가는 아니지만, 그러나 당신의'p' 및 AS't' 별명은'DELETE' 쿼리에 이해하지 못하는 것 같습니다 AS. 당신이 그들을 제거하면 그것은 작동합니까? –

+0

@JoeWhite 왜 그들은 이해가 안되나요? 당신이 가지고있는 경우'WHERE'에서 사용할 수 있습니다. 또는 (내 대답을 참조하십시오) 어떤 테이블에서 'DELETE'가 발생하는지 지정하십시오. – glglgl

답변

5

DELETEdifferent syntax입니다. 삭제할 테이블을 지정해야합니다.

그래서

DELETE p, t FROM products AS p NATURAL JOIN tempTable AS t; 
DELETE p FROM products AS p NATURAL JOIN tempTable AS t; 
DELETE t FROM products AS p NATURAL JOIN tempTable AS t; 
관련 문제