database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 28002 게시물 읽기
No. 28002
질문이 잘못 된것 같기에 다시 한번 질문드려요
작성자
이민호
작성일
2009-02-05 13:41
조회수
4,481

죄송합니다. 제질문이 잘못된 것 같아 재질문 드립니다.

수고 스럽지만 한번 더 부탁 드립니다.


table A 와 table b 가 있습니다.


table A


aa ab ac ad az ae af  ag
1   2    4   4   5   6   7   2 
2   3    5   5   6   7   8   2 
3   4    6   6   7   8   9   2 
4   5    7   7   8   9  10   2
5   6    8   8   9  10  11  2  

table B
ba bb bc bb-d bd be bf bg  bh  bi
1    3   4   9      5   6   7   8    1   1
2    1   5   8      5   6   7   8    1   1
3    4   6   7      7   8   9   1    1   1
4    6   7   8      9  10  11  1    1   1
6    7   8   9      3   4   5   1    1   1
1    2   3   4      5   6   7   8    1   1

pk 값이 ac = bc 이고  (ba = aa, bb=ab, bd=ad, be=ae, bf=af, bg=ag )
괄호 안의 것중 하나라도 다르면  
update , ac 필드에 bc의 값 중 없는 값이 있으면 insert 

이 글에 대한 댓글이 총 3건 있습니다.

앞서의 overdose님의 답변이 맞습니다. 

원하시는 답이 나오지 않았다면 primary key가 제대로 되어 있는지부터 확인하셔야 할것 같네요.

구헌수(madcat)님이 2009-02-05 19:36에 작성한 댓글입니다.

스터디중 필드와 필드가 1:1 매칭하는 방법을 알게 되었습니다. 그러던중 madcat 님의

댓글을 일고 확인 해보니 pk값이 2개 라서 테스트를 하면 전부 insert가

됩니다. 첫번째꺼는 auto_in~ 되어 있는 그냥 형식상의 것이고

실제 적용되야 할것은 두번째 pk 값인데 중복되는 내용이 없어서 이것이 pk 일거라

생각했는데 ... 당혹 스럽네요.... 이럴 경우에는 어떻게 해줘야 할까요?

이곳 저곳 뒤져 보니 pk를 변경할 수  없다고 하던데요. 수정이 안된다면 다른 방법으로

update insert 를 해줘야 하나요?

이민호님이 2009-02-09 13:48에 작성한 댓글입니다. Edit
아래와 같이 update와 insert를 차례대로 적용하시면 될 것 같네요

create table testA                        
as                                        
select 1 aa, 2 ab, 4 ac, 4 ad, 5 az,  6 ae,  7 af, 2 ag union all
select 2 aa, 3 ab, 5 ac, 5 ad, 6 az,  7 ae,  8 af, 2 ag union all
select 3 aa, 4 ab, 6 ac, 6 ad, 7 az,  8 ae,  9 af, 2 ag union all
select 4 aa, 5 ab, 7 ac, 7 ad, 8 az,  9 ae, 10 af, 2 ag union all
select 5 aa, 6 ab, 8 ac, 8 ad, 9 az, 10 ae, 11 af, 2 ag;
                                          
mysql> alter table testA add primary key (ac);
Query OK, 5 rows affected (3.67 sec)      
Records: 5  Duplicates: 0  Warnings: 0    
                                          
mysql> desc testa;                        
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| aa    | bigint(20) | NO   |     | 0       |       |
| ab    | bigint(20) | NO   |     | 0       |       |
| ac    | bigint(20) | NO   | PRI | 0       |       |
| ad    | bigint(20) | NO   |     | 0       |       |
| az    | bigint(20) | NO   |     | 0       |       |
| ae    | bigint(20) | NO   |     | 0       |       |
| af    | bigint(20) | NO   |     | 0       |       |
| ag    | bigint(20) | NO   |     | 0       |       |
+-------+------------+------+-----+---------+-------+
8 rows in set (0.39 sec)                  
                                          
                                          
create table testB                        
as                                        
select 1 ba, 3 bb, 4 bc, 9 "bb-d", 5 bd,  6 be,  7 bf, 8 bg, 1 bh, 1 bi union all
select 2 ba, 1 bb, 5 bc, 8 "bb-d", 5 bd,  6 be,  7 bf, 8 bg, 1 bh, 1 bi union all
select 3 ba, 4 bb, 6 bc, 7 "bb-d", 7 bd,  8 be,  9 bf, 1 bg, 1 bh, 1 bi union all
select 4 ba, 6 bb, 7 bc, 8 "bb-d", 9 bd, 10 be, 11 bf, 1 bg, 1 bh, 1 bi union all
select 6 ba, 7 bb, 8 bc, 9 "bb-d", 3 bd,  4 be,  5 bf, 1 bg, 1 bh, 1 bi union all
select 1 ba, 2 bb, 3 bc, 4 "bb-d", 5 bd,  6 be,  7 bf, 8 bg, 1 bh, 1 bi;
                                          
                                          
mysql> alter table testB add primary key (bc);
Query OK, 6 rows affected (0.25 sec)      
Records: 6  Duplicates: 0  Warnings: 0    
                                          
mysql> desc testb;                        
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| ba    | bigint(20) | NO   |     | 0       |       |
| bb    | bigint(20) | NO   |     | 0       |       |
| bc    | bigint(20) | NO   | PRI | 0       |       |
| bb-d  | bigint(20) | NO   |     | 0       |       |
| bd    | bigint(20) | NO   |     | 0       |       |
| be    | bigint(20) | NO   |     | 0       |       |
| bf    | bigint(20) | NO   |     | 0       |       |
| bg    | bigint(20) | NO   |     | 0       |       |
| bh    | bigint(20) | NO   |     | 0       |       |
| bi    | bigint(20) | NO   |     | 0       |       |
+-------+------------+------+-----+---------+-------+
10 rows in set (0.03 sec)                 
                                          
mysql> select * from testa;               
+----+----+----+----+----+----+----+----+ 
| aa | ab | ac | ad | az | ae | af | ag | 
+----+----+----+----+----+----+----+----+ 
|  1 |  2 |  4 |  4 |  5 |  6 |  7 |  2 | 
|  2 |  3 |  5 |  5 |  6 |  7 |  8 |  2 | 
|  3 |  4 |  6 |  6 |  7 |  8 |  9 |  2 | 
|  4 |  5 |  7 |  7 |  8 |  9 | 10 |  2 | 
|  5 |  6 |  8 |  8 |  9 | 10 | 11 |  2 | 
+----+----+----+----+----+----+----+----+ 
5 rows in set (0.03 sec)                  
                                          
mysql> select * from testb;               
+----+----+----+------+----+----+----+----+----+----+
| ba | bb | bc | bb-d | bd | be | bf | bg | bh | bi |
+----+----+----+------+----+----+----+----+----+----+
|  1 |  2 |  3 |    4 |  5 |  6 |  7 |  8 |  1 |  1 |
|  1 |  3 |  4 |    9 |  5 |  6 |  7 |  8 |  1 |  1 |
|  2 |  1 |  5 |    8 |  5 |  6 |  7 |  8 |  1 |  1 |
|  3 |  4 |  6 |    7 |  7 |  8 |  9 |  1 |  1 |  1 |
|  4 |  6 |  7 |    8 |  9 | 10 | 11 |  1 |  1 |  1 |
|  6 |  7 |  8 |    9 |  3 |  4 |  5 |  1 |  1 |  1 |
+----+----+----+------+----+----+----+----+----+----+
6 rows in set (0.00 sec)                  
                                          
                                          
UPDATE TESTA, TESTB                       
   SET AA = BA,                           
       AB = BB,                           
       AD = BD,                           
       AE = BE,                           
       AF = BF,                           
       AG = BG                            
 WHERE TESTA.AC = TESTB.BC;
               
                                          
mysql> select * from testa;               
+----+----+----+----+----+----+----+----+ 
| aa | ab | ac | ad | az | ae | af | ag | 
+----+----+----+----+----+----+----+----+ 
|  1 |  3 |  4 |  5 |  5 |  6 |  7 |  8 | 
|  2 |  1 |  5 |  5 |  6 |  6 |  7 |  8 | 
|  3 |  4 |  6 |  7 |  7 |  8 |  9 |  1 | 
|  4 |  6 |  7 |  9 |  8 | 10 | 11 |  1 | 
|  6 |  7 |  8 |  3 |  9 |  4 |  5 |  1 | 
+----+----+----+----+----+----+----+----+ 
5 rows in set (0.00 sec)                  
                                          
                                          
INSERT INTO TESTA (AA, AB, AC, AD, AE, AF, AG)
SELECT BA, BB, BC, BD, BE, BF, BG         
  FROM TESTB B                            
 WHERE NOT EXISTS (SELECT 1               
                     FROM TESTA A         
                    WHERE A.AC = B.BC);
   
                                          
                                          
mysql> select * from testa;               
+----+----+----+----+----+----+----+----+ 
| aa | ab | ac | ad | az | ae | af | ag | 
+----+----+----+----+----+----+----+----+ 
|  1 |  2 |  3 |  5 |  0 |  6 |  7 |  8 | 
|  1 |  3 |  4 |  5 |  5 |  6 |  7 |  8 | 
|  2 |  1 |  5 |  5 |  6 |  6 |  7 |  8 | 
|  3 |  4 |  6 |  7 |  7 |  8 |  9 |  1 | 
|  4 |  6 |  7 |  9 |  8 | 10 | 11 |  1 | 
|  6 |  7 |  8 |  3 |  9 |  4 |  5 |  1 | 
+----+----+----+----+----+----+----+----+ 
6 rows in set (0.00 sec)                  
구헌수(madcat)님이 2009-02-09 22:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
28006정규화 vs 비정규화 [2]
unclejoe
2009-02-06
5179
28005서브쿼리는 어떻게 쓸 수 있는지 궁금합니다. [1]
Love_SQL
2009-02-05
4845
28003InnoDB를 플러그인 형식으로 설치해보신 분 계시면 조언 좀 부탁드릴께요 [1]
김승동
2009-02-05
5278
28002질문이 잘못 된것 같기에 다시 한번 질문드려요 [3]
이민호
2009-02-05
4481
28001sqlmanage 사용법 [1]
김원진
2009-02-05
4536
28000More than one INDEX key was created for column '컬럼명' [1]
이득술
2009-02-05
5321
27997테이블 스토리지 엔진을 모두 InnoDB로 선택해도 문제 없을까요? [2]
김승동
2009-02-03
5374
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다