2011-04-25 3 views
41

I MySQL의 테이블의 구조는 다음과 같습니다MySQL은 두 개의 열을 결합하여 새로운 컬럼에 추가

+----------------+----------------+----------+ 
| zipcode  |  city  | state | 
+----------------+----------------+----------+ 
|  10954  |  Nanuet  | NY | 
+----------------+----------------+----------+ 

내가 이런 식으로 하나 개의 컬럼에 위의 3 열을 결합 할을 :

+---------------------+ 
|  combined  | 
+---------------------+ 
| 10954 - Nanuet, NY | 
+---------------------+ 

그리고이 "결합 된"열을 원래 3 개의 필드를 손상시키지 않고 테이블 끝에 추가하려고합니다.

답변

115

열 만들기 , ',', state) 표에서 결합 됨

+15

+1에 대한 트리거 – MikeTheReader

+0

어떻게 업데이 트에 두 개의 필드를 설정합니까, 또 다른 세트 new.rowname 문을 추가했지만 오류가 발생했습니다. – LukeS

+0

저는 여기서 메모리로 갈 것입니다. 그러나 값을 쉼표로 구분하여 구분할 수 있다고 확신합니다 : set new.foo = 1, new.bar = 2 – squawknull

12

테이블에 새 열을 추가하고 쿼리 perfrom :

UPDATE tbl SET combined = CONCAT(zipcode, ' - ', city, ', ', state) 
+0

저장 용량보다 성능이 좋아서이 옵션이 마음에 듭니다. 성능 이상의 스토리지의 경우, 선택 쿼리 자체에 concat을 추가 할 수 있습니다. 트리거 코드에 대한 squaknull의 게시물을 참조하십시오. – adorablepuppy

22

당신이이 작업을 수행 하시겠습니까을? 본질적으로 세 개의 원래 열에있는 데이터를 복제하고 있습니다. 이 시점부터 결합 된 필드의 데이터가 처음 세 개의 열의 데이터와 일치하는지 확인해야합니다. 이는 응용 프로그램에 더 많은 오버 헤드가 발생하며 시스템을 업데이트하는 다른 프로세스는 관계를 이해해야합니다.

데이터가 필요한 경우 언제 필요합니까? 것 해당 필드에있을 것입니다 무엇을 선택하는 SQL은 :

SELECT CONCAT(zipcode, ' - ', city, ', ', state) FROM Table; 

이 방법 필드의 데이터가 변경, 당신은 당신의 결합 필드를 업데이트 할 수없는 경우. 도시를 '-'

CREATE TRIGGER insert_trigger 
BEFORE INSERT ON yourtable 
FOR EACH ROW 
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state); 

CREATE TRIGGER update_trigger 
BEFORE UPDATE ON yourtable 
FOR EACH ROW 
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state); 
+0

저는 자동 완성 기능을 사용하고 있으며 우편 번호와 도시 모두에서 자동 완성을 검색 할 수 있기를 원하며 이는 쉬운 방법처럼 보입니다. 적어도 내 지식 수준. – stewart715

+1

다음과 같이 자동 완성을 수행하십시오. ** SELECT * from zipcode LIKE '% q % 또는 도시와 같이'% q % 또는 상태 LIKE '% q % ** –

+0

이것은 나에게 가장 깨끗하다고 ​​느낍니다. 데이터를 복제 한 다음 이들이 동기화되었는지 확인하고 더 높은 수준의 코드에서 동기화되지 않은 문제를 해결하기위한 추가 논리를 구축하면 단순히 'SELECT'를 연결하거나 연결하기 위해 앱을 사용하는 것보다 훨씬 더 진부한 것처럼 보입니다. @ squawknull의 대답이 적절한 곳에 멋진 개념을 도입했지만,이 대답에 더 동의하지 못했습니다. – mrClean

0

SELECT CONCAT (우편 번호 :

ALTER TABLE yourtable ADD COLUMN combined VARCHAR(50); 

업데이트 현재 값 :

UPDATE yourtable SET combined = CONCAT(zipcode, ' - ', city, ', ', state); 

업데이트를 자동으로 모든 미래 가치

관련 문제