mysqldump 에는 주어진 테이블에 대해 WHERE 절을 실행하는 --where 옵션이 있습니다.
조인 쿼리를 mysqldump 할 수는 없지만 각 테이블에서 가져온 모든 행이 나중에 조인에 참여하도록 각 테이블에서 특정 행을 내보낼 수 있습니다.
주어진 쿼리에 대해 세 번 mysqldump해야합니다.
먼저 mysql은 이름이 ( 'fee', 'fi', 'fo', 'fum') 인 모든 table3 행을 덤프합니다.
mysqldump -u... -p... --where="name in ('fee','fi','fo','fum')" mydb table3 > table3.sql
다음으로 mysqldump는 첫 번째 mysqldump의 table3_id 값과 일치하는 모든 table2 행을 덤프합니다.
mysqldump -u... -p... --lock-all-tables --where="table3_id in (select id from table3 where name in ('fee','fi','fo','fum'))" mydb table2 > table2.sql
그런 다음 mysqldump는 두 번째 mysqldump의 table1_id 값과 일치하는 모든 table1 행을 덤프합니다.
mysqldump -u... -p... --lock-all-tables --where="id in (select table1_id from table2 where table3_id in (select id from table3 where name in ('fee','fi','fo','fum')))" mydb table1 > table1.sql
참고 : 두 번째 및 세 번째 mysqldump에는 둘 이상의 테이블을 사용해야하므로 --lock-all-tables를 사용해야합니다 .
새 데이터베이스를 작성하십시오.
mysqladmin -u... -p... mysqladmin create newdb
마지막으로, 세 개의 mysqldump를 다른 데이터베이스에로드하고 새 데이터베이스에서 조인을 시도하십시오.
mysql -u... -p... -D newdb < table1.sql
mysql -u... -p... -D newdb < table2.sql
mysql -u... -p... -D newdb < table3.sql
MySQL 클라이언트에서 조인 쿼리를 실행하십시오.
mysql> use newdb
mysql> select table1.id, table1.level, table2.name, table2.level
from table1 join table2 on table1.id = table2.table1_id
join table3 on table3.id = table2.table3_id
where table3.name in ('fee', 'fi', 'fo', 'fum');
시도 해봐 !!!
경고 : 올바르게 색인되지 않으면 두 번째 및 세 번째 mysqldumps가 영원히 걸릴 수 있습니다!
만일을 대비하여 다음 열을 색인화하십시오.
ALTER TABLE table2 ADD INDEX (table1_id);
ALTER TABLE table2 ADD INDEX (table3_id);
ALTER TABLE table3 ADD INDEX (name,id);
id가 table3의 기본 키라고 가정하겠습니다.