programing

mysql에 한 테이블에서 다른 테이블로 데이터를 삽입합니다.

goodcopy 2023. 1. 10. 21:19
반응형

mysql에 한 테이블에서 다른 테이블로 데이터를 삽입합니다.

한 테이블의 모든 데이터를 읽고 다른 테이블에 데이터를 삽입하고 싶습니다. 제 질문은

  INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
  VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id 
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC), '1')

근데 에러가 나서

  #1136 - Column count doesn't match value count at row 1

제발 도와주세요

INSERT를 사용할 수 있습니다.SELECT 구문SELECT 부분에서 직접 '1'을 따옴표로 묶을 수 있습니다.

INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
SELECT magazine_subscription_id, 
       subscription_name, 
       magazine_id, 
       '1'
FROM tbl_magazine_subscription
ORDER BY magazine_subscription_id ASC 

한 테이블에서 다른 테이블로 모든 데이터를 삽입하려면 매우 간단한 SQL이 있습니다.

INSERT INTO destinationTable  (SELECT * FROM sourceDbName.SourceTableName);

이런 식으로는 안 돼

쿼리를 사용하여 행을 삽입하려고 하면 모든 값이 쿼리에 있어야 합니다.

위의 문제를 삽입하고 싶은 경우magazine_subscription_id, subscription_name, magazine_id, status선택 쿼리에는 다음과 같은 기능이 있습니다.magazine_subscription_id, subscription_name, magazine_id, status1 그것은 불가능하다.

둘 중 하나를 삽입하려면 직접 값의 쿼리를 사용하여 삽입해야 합니다.

실제로 한 테이블에서 다른 테이블로 데이터를 복사하기 위한 mysql 쿼리는

Insert into table2_name (column_names) select column_name from table1

여기서 table1에서table2로 복사된 값

"id"와 같은 프라이머리 키가 있는 경우 이를 제외해야 합니다.예를 들어 내 php 테이블에는 id, col2, col3, col4 컬럼이 있습니다.id는 프라이머리 키이므로 이 코드를 실행하면 다음과 같습니다.

INSERT INTO php  (SELECT * FROM php2);

다음과 같은 오류가 발생할 수 있습니다.

#1062 - Duplicate entry '1' for key 'PRIMARY'

해결책은 다음과 같습니다. "id" 키는 제외했습니다.

INSERT INTO php ( col2,col3,col4)  (SELECT col2,col3,col4 FROM php2);

그래서 나의 새로운 php 테이블은 더 이상 모든 php2 테이블 행을 가지고 있다.

INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id,'1' as status
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC));

이거 먹어봐.네가 잘못하고 있어.

    INSERT INTO mt_magazine_subscription( 
    magazine_subscription_id, 
    subscription_name, 
    magazine_id, status) VALUES ( 
         (SELECT magazine_subscription_id, subscription_name, 
                 magazine_id,1 as status FROM tbl_magazine_subscription 
                 ORDER BY magazine_subscription_id ASC)
    )
  INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
  VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id,'1' as status
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC))

이것을 사용해 보세요.

INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
SELECT magazine_subscription_id, 
       subscription_name, 
       magazine_id, 
       '1'
FROM tbl_magazine_subscription
ORDER BY magazine_subscription_id ;

select 절에 하드 코드화된 값 사용

MySQL 조건의 한 테이블에서 다른 테이블로 데이터를 삽입하면 SQL Server에서도 동일하게 작동합니다.기존 데이터가 아닌 데이터만 업데이트됩니다.두 테이블 모두 구조가 동일하므로 열이 통과할 필요가 없습니다.

insert into table_A
select * from table_A_copy 
where not exists
(
select * from table_A where table_A_copy.clm_a=table_A.clm_a and table_A_copy.clm_b=table_A.clm_b and table_A_copy.clm_c=table_A.clm_c
);
INSERT INTO destination_table ( 
      Field_1, 
      Field_2, 
      Field_3) 
SELECT Field_1, 
      Field_2, 
      Field_3 
      FROM source_table;

하지만 이것은 BAD MYSQL입니다.

대신 다음을 수행합니다.

  1. drop the destination table: DROP DESTINATION_TABLE;
  2. CREATE TABLE DESTINATION_TABLE AS (SELECT * FROM SOURCE_TABLE);
INSERT INTO mt_magazine_subscription SELECT *
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC

언급URL : https://stackoverflow.com/questions/14907863/insert-data-from-one-table-to-another-in-mysql

반응형