2013-08-06 6 views
2

동일한 표의 한 열에 두 개의 열에서 두 개의 값을 선택하여 값을 삽입하고 있습니다. 내 쿼리는 다음과 같습니다. MySQL의 쿼리동일한 테이블의 열로 두 열의 값을 선택하여 삽입하십시오.

insert into table1 (username) 
select prefix + (LPAD(Coalesce(MAX(id),0) + 1,3, '0')) 
    from table1; 

위의 삽입 쿼리가 작동하지 않습니다 삽입

create table table1(
id int(3) zerofill auto_increment primary key, 
prefix varchar(10) default "AB", 
username varchar(10) 
) 
engine=innodb; 

, 그것은 사용자 이름 열에서 null을 제공, 어떤 도움 appreciated.Thanks입니다하시기 바랍니다. 예상되는 결과는 다음과 같습니다.

id Prefix username 
    001 AB  AB001 
    002 AB  AB002 
    003 AB  AB003 

답변

1

문제 : 매트로

  1. NULL 따라서 당신이 연결
  2. 에 대한 기본 값을 얻기 위해 COALESCE() 또는 IFNULL()을 사용할 필요가 귀하의 SELECT 수익률을 삽입되는 첫 번째 레코드를 들어 MySQL을
  3. CONCAT()를 사용할 필요가 언급

귀하의 질의는 이와 같아야합니다.

INSERT INTO table1 (username) 
SELECT CONCAT(COALESCE(prefix, 'AB'), LPAD(COALESCE(MAX(id), 0) + 1, 3, '0')) 
    FROM table1 

결과 :

 
| ID | PREFIX | USERNAME | 
-------------------------- 
| 1 |  AB | AB001 | 
| 2 |  AB | AB002 | 

여기, SQLFddle 내가 쿼리의 정수로`AB`을 방지하고이 같은 table1.Something에서 'AB'를 호출 할 수 있도록하려면

+0

입니다 'COLESCE (접두어, ''), LPAD (COALESCE (MAX (id), 0) + 1, 3, '0')) FROM table1' 가능하거나 다른 방법이 있습니다. – George

+0

@George 쿼리는 테이블에서 접두사를 가져오고 테이블에 행이없는 경우에만 상수 값이 사용됩니다 (테이블은 비어 있으며 첫 번째 행 삽입). 이 경우 접두어는'NULL'이며 두 번째 매개 변수에서''AB ''를 선택하는 데'COALESCE'가 사용되는 이유입니다. – peterm

+0

우리는 지금 채팅 할 수 있습니다. – George

2

+은 MySQL의 문자열 연결 연산자가 아닙니다. 그런 다음, sql_mode=PIPES_AS_CONCAT (또는 equivalent)를 사용하는 경우 :

insert into table1 (username) 
select prefix || (LPAD(Coalesce(MAX(id),0) + 1,3, '0')) 
from table1; 

그렇지 않으면 CONCAT를 사용합니다.

관련 문제