Zackville을모든 코멘트에는 매우 유효 점이 있으며 이어야합니다.은 RDBMS에서 구분 된 값으로 작업하는 것을 피하십시오.
기존 데이터베이스에 문제가있어 어떤 이유로 클라이언트 코드가 아닌 데이터베이스 수준에서 수행하려는 경우 집계 테이블을 활용하여 SUBSTRING_INDEX()
으로 구분 된 값을 나눌 수 있습니다. 행 다음에 GROUP_CONCAT()
을 사용하여 데이터를 정렬 된 방식으로 되돌릴 수 있습니다. 집계 테이블을 생성하는 여러 가지 방법
하나가 집계 테이블의 행
CREATE TABLE tally (n int not null primary key);
INSERT INTO tally (n)
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
번호 구분 값의 최대 가능 수보다 크거나 같아야한다. 이제
는 구분 된 값을 리조트 :
UPDATE postcode p JOIN
(
SELECT id, GROUP_CONCAT(suburbs ORDER BY suburbs SEPARATOR ';') suburbs
FROM
(
SELECT t.id, SUBSTRING_INDEX(SUBSTRING_INDEX(t.suburbs, ';', n.n), ';', -1) suburbs
FROM postcode t CROSS JOIN tally n
WHERE n.n <= 1 + (LENGTH(t.suburbs) - LENGTH(REPLACE(t.suburbs, ';', '')))
) q
GROUP BY id
) s
ON p.id = s.id
SET p.suburbs = s.suburbs;
출력 :
여기
| ID | SUBURBS |
|----|-----------------------------------|
| 1 | Astor;Jackson;Mary-town;Zackville |
이
왜 대신 외래 키를 사용하지 않는 SQLFiddle 데모는? – tsnorri
교외에 다른 테이블이 없습니다. – Jus
하나 가져 오십시오. 빨리. – Strawberry