2012-05-30 10 views
1

중첩 쿼리를 사용하여 두 가지 다른 쿼리를 실행하지 않아도됩니다. 내 중첩 된 쿼리는 아래와 같습니다.MySQL 중첩 쿼리 조회 오류

INSERT INTO roles (
    _id, 
    user_id, 
    user_role) 
VALUES (
((SELECT _id FROM roles ORDER BY _id DESC LIMIT 1)+1), '454', 'USER') 

하지만 실행하면 얻을 수 있습니다.

Lookup Error - MySQL Database Error: You can't specify target table 'roles' for update in FROM clause

이 쿼리에 대한 해결 방법이 있습니까? 아니면 같은 테이블에 삽입하고 선택할 수 없습니까?

답변

3

당신은 MySQL의> = 4.0.14을 사용하는 경우, 당신은 INSERT ... SELECT 사용할 수 있습니다 : 당신은 아마 제공하지 않는 다음 _idAUTO_INCREMENT을하고 싶은 것처럼 그러나

INSERT INTO roles (
    _id, 
user_id, 
user_role 
) 
SELECT _id + 1, '454', 'USER' FROM roles ORDER BY _id DESC LIMIT 1 

, 그것은 본다 그것을위한 어떤 가치. 빠른 응답을 위해

ALTER TABLE roles MODIFY _id INT AUTO_INCREMENT; 
INSERT INTO roles (user_id, user_role) VALUES (454, 'USER'); 
+0

+1 -이 곧 받아 들일 것입니다 : MySQL은 나머지를 할 것입니다 – Bitmap

0
INSERT INTO roles 
SELECT _id+1,'454', 'USER' FROM roles ORDER BY _id DESC LIMIT 1