정확한 방법인지는 모르겠지만, 나름 방법을 찾아서 정리해봅니다. (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}") );
Korean_name 칼럼에 들어오는 값은 Unique합니다. 중복하는 값이 들어올 수 없다는 의미입니다. 고유한 값임으로 WHERE조건문에 써줄 수 있습니다.
SELECT id FROM products WHERE products.korean_name = "{korean_name}"
만일 korean_name이 table1에 존재한다면 쿼리문의 결과는 해당하는 id값을 보여줄 것입니다.
+----+ | id | +----+ | 9 | +----+
위에서 얻은 id 값과 이미지주소를 INSERT 해줍니다.
INSERT INTO products_images(image_url, products_id) VALUE ( "이미지주소", (SELECT id FROM products WHERE products.korean_name = "{korean_name}") );