본문 바로가기
프로젝트

[SuiteCare] MySQL 다른 테이블에서 데이터 가져와서 insert하기

by 네모세모동동 2024. 4. 15.

recruitmentTB에 공고 관련 데이터를 넣으면서 해당 공고와 관련된 환자 정보도 함께 넣으려고 한다.

(환자를 따로 관리하는 페이지가 있는데 공고를 올리고 환자 정보를 바꿀 때마다 공고에 대한 정보가 바뀌면 안되기 때문에 공고TB에 환자 정보를 입력하기로 했다.)

 

patientTB에서 필요한 값과 새로 입력 받은 공고 관련 정보를 같이 insert하는 방법을 알아보도록 하겠다.

 

📍다른 테이블의 데이터 insert 하기

1. 모든 속성을 insert 하기

INSERT INTO 데이터 넣을 TB명
SELECT * 
FROM 데이터 가져올 TB명
WHERE 조건;

 

EX.

INSERT INTO recruitment
SELECT *
FROM patient WHERE id = 2;

 

❗ recruitmentTB과 patientTB의 속성 갯수가 일치하지 않다면 입력되지 않는다!

❗ 속성명과 상관없이 속성 순서에 따라서 값이 입력된다.

 

 

2. 일부 속성 insert 하기

INSERT INTO 데이터 넣을 TB명(속성명)
SELECT 속성명
FROM 데이터 가져올 TB명;

 

EX.

INSERT INTO recruitment(patient_name, patient_height)
SELECT name, height
FROM patient WHERE id = 2;

 

📍 다른 테이블의 데이터와 추가 데이터 함께 insert 하기

INSERT INTO 데이터 넣을 TB명 (col1, col2)

SELECT
    새로 입력하는 데이터, 가져올 속성명
FROM 데이터를 가져올 TB명;

 

EX.

patientTB에서 id가 3인 특정 환자의 이름을 가져와서 recruitment 테이블의 patient_name에 저장하고,
location 필드에는 'home'이라는 값을 저장하는 쿼리문이다.

INSERT INTO recruitment(location, patient_name)
SELECT 'home', name
FROM patient WHERE id = 3;

 

 

 

 

[프로젝트에서 사용한 xml 쿼리문]

INSERT INTO
	recruitment (member_id, location, postcode, road_address, address_detail, wage, start_date, end_date, start_time, end_time, expire_at, status, patient_id, patient_name, patient_gender, patient_birthday, patient_diagnosis_name)

SELECT
    #{login_id}, #{recruitmentRequestDTO.location}, #{recruitmentRequestDTO.postcode}, #{recruitmentRequestDTO.road_address},
    #{recruitmentRequestDTO.address_detail}, #{recruitmentRequestDTO.wage}, #{recruitmentRequestDTO.start_date}, #{recruitmentRequestDTO.end_date},
    #{recruitmentRequestDTO.start_time}, #{recruitmentRequestDTO.end_time}, #{recruitmentRequestDTO.expire_at}, 'P', #{recruitmentRequestDTO.patient_id},
    name, gender, birthday, diagnosis_name

FROM patient
WHERE patient.id = #{recruitmentRequestDTO.patient_id}

[출처]