my sql 여러 필드 연결 인 스 턴 스 상세 설명

Mysql 의 조회 결과 줄 필드 를 연결 하면 다음 두 함수 로 구현 할 수 있 습 니 다.
1.concat 함수

mysql> select concat('1','2','3') from test ;
+---------------------+
| concat('1','2','3') |
+---------------------+
| 123 |
+---------------------+
연결 문자열 에 NULL 이 존재 하면 결 과 를 NULL 로 되 돌려 줍 니 다.

mysql> select concat('1','2',NULL,'3') from test ;
+--------------------------+
| concat('1','2',NULL,'3') |
+--------------------------+
| NULL |
+--------------------------+
2. concat_ws 함수
concat(separator,str1,str 2,...)는 concat with separator 를 대표 하 며 concat()의 특수 한 형식 이다.첫 번 째 매개 변 수 는 다른 매개 변수의 구분자 입 니 다.구분자 의 위 치 는 연결 할 두 문자열 사이 에 놓 여 있 습 니 다.구분자 가 문자열 일 수도 있 고 다른 인자 일 수도 있 습 니 다.

mysql> select concat_ws(':','1','2','3') from test ;
+----------------------------+
| concat_ws(':','1','2','3') |
+----------------------------+
| 1:2:3 |
+----------------------------+
구분자 가 NULL 이면 결 과 를 NULL 로 되 돌려 줍 니 다.

mysql> select concat_ws(NULL,'1','2','3') from test; 
+-----------------------------+
| concat_ws(NULL,'1','2','3') |
+-----------------------------+
| NULL | 
+-----------------------------+
인자 에 NULL 이 존재 하면 무시 합 니 다.

mysql> select concat_ws(':','1','2',NULL,NULL,NULL,'3') from test ;
+-------------------------------------------+
| concat_ws(':','1','2',NULL,NULL,NULL,'3') |
+-------------------------------------------+
| 1:2:3 |
+-------------------------------------------+
NULL 을 판단 하고 다른 값 으로 대체 할 수 있 습 니 다.

mysql> select concat_ws(':','1','2',ifNULL(NULL,'0'),'3') from bank limit 1; 
+---------------------------------------------+
| concat_ws(':','1','2',ifNULL(NULL,'0'),'3') |
+---------------------------------------------+
| 1:2:0:3          | 
+---------------------------------------------+
보충:my sql 에서 그룹 을 나 눌 때 필드 의 값 을 맞 춥 니 다.
t_개 시계

t_백신

t_dog_백신

문제 설명
나 는 dog 를vaccine 에서 개 마다 대응 하 는 백신 을 조회 해 보 았 습 니 다.개 와 백신 은 여러 쌍 의 관계 이기 때문에 한 개 는 여러 개의 백신 에 대응 할 수 있 습 니 다.그러나 저 는 이 여러 개의 백신 을 문자열 로 연결 한 다음 에 자바 실체 류 에 투사 하고 싶 습 니 다.
한 걸음 한 걸음 해결 하 다
나 는 두 개의 왼쪽 연결 조회 로 tdog 시계,tvaccine 표,tdog_vaccine 표 이 세 표 가 연결 되 어 있 습 니 다.

select dv.id as id,
 d.dog_name as dogName,v.vaccine_name 
 from 
 t_dog_vaccine dv
  left join t_dog d on dv.dog_id = d.id
  left join t_vaccine v on dv.vaccine_id = v.id 

이렇게 해서 개 와 백신 을 모두 대응 시 켰 지만 개 마다 여러 개의 기록 이 있 고 나 는 개 이름 한 개 와 여러 개의 백신 을 원한 다.name 의 값 을 문자열 과 같은 데이터 로 합 쳤 습 니 다.생각 을 하 다 보 니 갑자기 생각 이 났 어 요...................................................

select dv.id as id,
 d.dog_name as dogName,v.vaccine_name 
 from 
 t_dog_vaccine dv
  left join t_dog d on dv.dog_id = d.id
  left join t_vaccine v on dv.vaccine_id = v.id 
  group by dogName

group by 를 사용 한 것 은 분명히 내 가 생각 한 결과 가 아니 야.dogName 은 하나 밖 에 없 지만 그 에 대응 하 는 백신 도 하나 밖 에 없어.나 는 여러 개의 백신 이름 을 원 하 는데 어 떡 하지?문자열 맞 춤 법 을 만 들 수 있 는 함수 가 있 지 않 습 니까?emmmmm,있 습 니 다.groupconcat。。。

select dv.id as id,
 d.dog_name as dogName,
 group_concat(v.vaccine_name) as dogVaccineName  
 from 
 t_dog_vaccine dv
  left join t_dog d on dv.dog_id = d.id
  left join t_vaccine v on dv.vaccine_id = v.id 
 group by d.dog_name

이 제 는 내 가 생각 하 는 효과 에 이 르 렀 다.
group_concat 용법
묵인

select group_concat(vaccine_name) as dogVaccineName from t_vaccine where id in(select vaccine_id from t_dog_vaccine where dog_id = 1)
group_concat 연결 시 기본 구분자 가','입 니 다.이 구분자 가 바 뀌 려 면 이렇게 할 수 있 습 니 다.

REPLACE(group_concat(vaccine_name),',','            ')
예 를 들 어 나 는 기본 적 인 것 을 바 꾸 고 싶다.

select REPLACE(group_concat(vaccine_name),',',';') as dogVaccineName from t_vaccine where id in(select vaccine_id from t_dog_vaccine where dog_id = 1)
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기