삽입

2016-07-06 7 views
0

우리는 테이블, 된 table_1이 새로운 순위 열 버그 :삽입

DATA 
1 
2 
3 
4 
5 
NULL 

우리는 데이터 열 다음

DATA,RANK 
1,1 
2,2 
3,3 
4,4 
5,5 
NULL,0 

에 따라 RANK 열을 생성하려는 우리의 코드입니다

ALTER TABLE ` TABLE_1` 

ADD COLUMN `RANK` DOUBLE NOT NULL AFTER `DATA`; 

INSERT INTO TABLE_1 

SELECT B.DATA, 

CASE WHEN B.DATA IS NULL THEN 0 ELSE @number := @number + 1 

END RANK 

FROM TABLE_1 B, (SELECT @number := 0 AS BOO) C 

ORDER BY B.RANK; 

위의 쿼리는 RANK 열에 만 0을 생성합니다.

우리가 다음과 같이 ALTER 표 않고, 따라서 쿼리를 실행하고 INSERT INTO 경우 17,451,515,
DATA,RANK 
1,0 
2,0 
3,0 
4,0 
5,0 
NULL,0 

그러나, HeidiSQL는 위의 스크립트는 테이블을 생성 할 것이다 우리가

SELECT B.DATA, 

CASE WHEN B.DATA IS NULL THEN 0 ELSE @number := @number + 1 

END RANK 

FROM TABLE_1 B, (SELECT @number := 0 AS BOO) C 

ORDER BY B.RANK; 

찾고있는 테이블을 반환합니다 우리 테이블 변경/INSERT INTO가 작동하지 않는 이유는 어떤 전문가는 계몽 할 수

DATA,RANK 
1,1 
2,2 
3,3 
4,4 
5,5 
NULL,0 

찾는거야?

는 SQL 바이올린은 여기에 있습니다 : 내부와

http://sqlfiddle.com/#!9/d2837/2

+0

가입 할 수 있습니다. 더 빨리 도움을받을 수는 없으며, 질문을 읽기가 더 어렵게 만듭니다. 아무 이유없이 놀랐을 때 무례하고 성가시다. CAPS LOCK이 걸려 있지 않은 것은 확실합니다. 질문의 일부 텍스트를 제대로 처리했기 때문입니다. 중지하십시오. 감사. –

+0

왜 DOUBLE ?????? – Strawberry

답변

0

사용 업데이트 쿼리 여기에 질문 제목을 외칠 필요가 없습니다

select * from bb; 
    +------+ 
    | data | 
    +------+ 
    | 1 | 
    | 2 | 
    | 3 | 
    | NULL | 
    +------+ 
    4 rows in set (0.00 sec) 
    mysql> ALTER TABLE `bb` ADD COLUMN `RANK` DOUBLE NOT NULL AFTER `DATA`; 
    Query OK, 0 rows affected (0.72 sec) 
    Records: 0 Duplicates: 0 Warnings: 0 


    mysql> UPDATE bb INNER JOIN (SELECT B.DATA as data ,CASE WHEN B.DATA IS NULL THEN 0 ELSE @number := @number + 1 END RANK FROM bb B, (SELECT @number := 0 AS BOO) C ORDER BY B.RANK) TT ON TT.DATA=bb.data set bb.rank=TT.rank; 
    Query OK, 3 rows affected (0.04 sec) 
    Rows matched: 3 Changed: 3 Warnings: 0 

    mysql> select * from bb; 
    +------+------+ 
    | data | RANK | 
    +------+------+ 
    | 1 | 1 | 
    | 2 | 2 | 
    | 3 | 3 | 
    | NULL | 0 | 
    +------+------+ 
    4 rows in set (0.00 sec) 
+0

흥미로운 솔루션! 그러나 이것이 테이블이 넓고 (2 백만 행) 큰 경우 쿼리 속도가 느려 집니까? – Chubaka

+0

아니 순위 논리는 상당한 영향을 미치지 않습니다 –

+0

당신이 이리저리 작동 –