[Mysql] Select + Insert

XCC629·2022년 3월 18일
0

backend

목록 보기
4/8

정확한 방법인지는 모르겠지만, 나름 방법을 찾아서 정리해봅니다. (03/18)

목표

외래키 칼럼 값을 쉽게 넣어보고 싶습니다.

table1: product

+--------------+--------------+------+-----+----------------------+-------------------+
| Field        | Type         | Null | Key | Default              | Extra             |
+--------------+--------------+------+-----+----------------------+-------------------+
| id           | int          | NO   | PRI | NULL                 | auto_increment    |
| korean_name  | varchar(191) | NO   | UNI | NULL                 |                   |
| english_name | varchar(191) | NO   |     | NULL                 |                   |
| category_id  | int          | NO   | MUL | NULL                 |                   |
| created_at   | datetime(3)  | YES  |     | CURRENT_TIMESTAMP(3) | DEFAULT_GENERATED |
+--------------+--------------+------+-----+----------------------+-------------------+

이 테이블은 이미 데이터가 들어가 있습니다.

table2: products_images

+-------------+--------------+------+-----+----------------------+-------------------+
| Field       | Type         | Null | Key | Default              | Extra             |
+-------------+--------------+------+-----+----------------------+-------------------+
| id          | int          | NO   | PRI | NULL                 | auto_increment    |
| image_url   | varchar(191) | NO   |     | NULL                 |                   |
| products_id | int          | NO   | MUL | NULL                 |                   |
| created_at  | datetime(3)  | YES  |     | CURRENT_TIMESTAMP(3) | DEFAULT_GENERATED |
+-------------+--------------+------+-----+----------------------+-------------------+

이 테이블을 만드려고 합니다.

table2에 보면 products_id 가 있습니다. 두 테이블은 1대1 혹은 1대다 관계에 있습니다. products_id는 FK로, table1의 id를 참조합니다. 이 칼럼에 데이터를 넣어주기 위해서 일일이 해당하는 제품의 id을 찾아야할까요? 비효율적이란 생각이 들었습니다.

해결방법

INSERT INTO products_images(image_url, products_id) 
  VALUE (
  	"이미지주소",
  	(SELECT id FROM products WHERE products.korean_name = "{korean_name}")
  );

table 1️⃣

Korean_name 칼럼에 들어오는 값은 Unique합니다. 중복하는 값이 들어올 수 없다는 의미입니다. 고유한 값임으로 WHERE조건문에 써줄 수 있습니다.

SELECT id FROM products WHERE products.korean_name = "{korean_name}"

만일 korean_name이 table1에 존재한다면 쿼리문의 결과는 해당하는 id값을 보여줄 것입니다.

+----+
| id |
+----+
|  9 |
+----+

table 2️⃣

위에서 얻은 id 값과 이미지주소를 INSERT 해줍니다.

INSERT INTO products_images(image_url, products_id) 
  VALUE (
  	"이미지주소",
  	(SELECT id FROM products WHERE products.korean_name = "{korean_name}")
  );
profile
프론트엔드 개발자

0개의 댓글