티스토리 뷰

반응형

고도화작업 중 테이블을 만들고 데이터를 복사할때 유용한 정보입니다.

두개의 테이블에서 각종 데이터를 매칭해서 복사하고자 할때....

두개의 테이블이 있다고 가정하고,

CREATE TABLE `orderdb` (
  `num` int NOT NULL AUTO_INCREMENT,
  `order_EMP_CD` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_erpuser` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_TIME_DATE` date DEFAULT NULL,
  `order_regist_date` date DEFAULT NULL,
  `order_CUST` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_CUST_DES` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_WH_CD` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_warename_input` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_Ecount` text,
  `order_comment` text,
  PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8;


CREATE TABLE `esmaindb` (
  `num` int NOT NULL AUTO_INCREMENT,
  `EMP_CD` text,
  `erpuser` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `TIME_DATE` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `regist_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `laser_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `bending_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `painting_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `lastwork_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `output_date` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `PROD_CD` text,
  `PROD_DES` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `SIZE_DES` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `CUST` text,
  `CUST_DES` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `WH_CD` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `warename_input` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `memo` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `state` text,
  `partsep` text,
  `totalVAT` text,
  `supplyPrice` text,
  `workprocessvalue` text,
  `requestwork` text,
  `Checksend` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `orderQTY` text,
  `unitprice` text,
  PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=2389 DEFAULT CHARSET=utf8;

위의 데이터베이터를 이용해서 `esmaindb` 에서 `orderdb`로 데이터를 복사하려고 하는데, php로 sql 문장

$sql = "INSERT INTO orderdb (order_EMP_CD, order_erpuser, order_TIME_DATE, order_regist_date, order_CUST, order_CUST_DES, order_WH_CD, order_warename_input, order_Ecount, order_comment)
SELECT EMP_CD, erpuser, TIME_DATE, regist_date, CUST, CUST_DES, WH_CD, warename_input, '', memo
FROM esmaindb";

 

INSERT INTO orderdb  명령어로 시작하고 결국 select  ******  from (가져올 테이블명)

이런형식으로 하면 된다는 것입니다.

주의사항으로는 

위의 SQL 문장은 esmaindb 테이블에서 데이터를 선택하고, orderdb 테이블에 해당 데이터를 복사합니다.
이때 SELECT 구문에서는 esmaindb 테이블의 필드를 orderdb 테이블의 필드에 매핑하여 복사합니다. order_Ecount 필드는 빈 값을 넣고, order_comment 필드는 memo 필드에서 가져옵니다.
또한 AUTO_INCREMENT 속성을 가진 필드인 num 필드는 복사하지 않아야 합니다.
복사 후에는 orderdb 테이블에서 새로운 데이터가 추가되었는지 확인해야 합니다.

명심하고 조심히 프로그램 하자구요!

테이블의 데이터를 복사하는 명령어!!!

이번엔 좀더 복잡하게 데이터를 한쪽에서 불러와서 비교 후 같은 것만 복사하고 싶을때...

CREATE TABLE `ordergrid` (
  `order_num` int NOT NULL AUTO_INCREMENT,
  `order_parentKey` int NOT NULL,
  `order_prod_cd` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_prod_des` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_size_des` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_p_remarks1` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_qty` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_price` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_supply_amt` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_vat_amt` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `order_remarks` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  PRIMARY KEY (`order_num`)
) ENGINE=InnoDB AUTO_INCREMENT=1535 DEFAULT CHARSET=utf8;

 

ordergrid라는 table을 생성하는데, 기존의 자료를 가져와서 뭔가 비교하고 같은 자료만 추출하고 싶을때 사용하면 좋은 것 같습니다.

ordergrid 테이블에 esmaindborderdb 테이블의 데이터를 복사하는 SQL문입니다.

INSERT INTO ordergrid (
  order_parentKey,
  order_prod_cd,
  order_prod_des,
  order_size_des,
  order_qty,
  order_price,
  order_supply_amt,
  order_vat_amt,
  order_remarks
)
SELECT
  es.num,
  ob.order_Ecount,
  es.PROD_DES,
  es.SIZE_DES,
  ob.orderQTY,
  ob.unitprice,
  ob.supplyPrice,
  ob.totalVAT,
  ob.order_comment
FROM
  esmaindb es
  JOIN orderdb ob ON es.regist_date = ob.order_regist_date AND es.CUST = ob.order_CUST

 

이 SQL문은 esmaindb와 orderdb 테이블을 조인하여 esmaindb 테이블의 num 컬럼을 order_parentKey에 복사하고, esmaindb 테이블의 PROD_DES, SIZE_DES 컬럼을 order_prod_des, order_size_des에 복사하고, orderdb 테이블의 order_Ecount, orderQTY, unitprice, supplyPrice, totalVAT, order_comment 컬럼을 order_prod_cd, order_qty, order_price, order_supply_amt, order_vat_amt, order_remarks에 복사합니다.

조인 조건으로는 esmaindb와 orderdb 테이블의 regist_date와 order_regist_date, CUST와 order_CUST 컬럼이 일치하는 데이터만 복사됩니다.

 

오늘 이것만으로도 충분합니다.

반응형
댓글