반응형
perl - 2개의 데이터베이스에서 2개의 SQL 쿼리로 이루어진 2개의 열을 비교합니다.
perl에서 데이터베이스 1의 이름과 데이터베이스 2의 이름이 같을 경우 데이터베이스 2에서 데이터베이스 1로 year와 parti를 삽입하고 싶다.
database 1 database 2
----------------------------------- ----------------------------------
table truc table truc2
----------------------------------- ----------------------------------
id name year parti id name year parti
----------------------------------- ----------------------------------
1 Lapin 14 Lapin 2014 MODEM
118 Koala 33 Murène 1347 EELV
14 Murène 2 Ragondin 4218 SP
3 Ragondin 3 Koala 1512 CPNT
나는 결과를 원한다:
database 1
-----------------------------------
table truc
-----------------------------------
id name year parti
-----------------------------------
1 Lapin 2014 MODEM
118 Koala 1512 CPNT
14 Murène 1347 EELV
3 Ragondin 4218 SP
답변해 주셔서 감사합니다.
내 perl 코드와 sql 코드는 여기 있습니다.
하나의 데이터베이스에서 읽고 두 번째 데이터베이스에서 업데이트합니다.
my $query2 = $db2->prepare('SELECT id, name, sex, year, parti FROM truc2');
my $query1 = $db1->prepare('UPDATE truc'
. ' SET year = ?, parti = ? WHERE name = ?');
$query2->execute;
while (my @row = $query2->fetchrow_array) {
$query1->execute($row[3], $row[4], $row[1]);
}
테스트 대상:
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
use feature qw{ say };
use open IO => ':encoding(UTF-8)', ':std';
use DBI;
my $db1 = DBI->connect('dbi:SQLite:dbname=:memory:', "", "",
{ sqlite_unicode => 1 });
$db1->do('CREATE TABLE truc'
. ' (id INT, name TEXT, sex VARCHAR, year INT, parti TEXT)');
my $db2 = DBI->connect('dbi:SQLite:dbname=:memory:', "", "",
{ sqlite_unicode => 1 });
$db2->do('CREATE TABLE truc2'
. ' (id INT, name TEXT, sex VARCHAR, year INT, parti TEXT)');
my $insert1 = $db1->prepare('INSERT INTO truc (id, name, sex)'
. ' VALUES (?, ?, ?)');
$insert1->execute(@$_) for [ 1, 'Lapin', 'M'],
[118, 'Koala', 'F'],
[ 14, 'Murène', 'A'],
[ 3, 'Ragondin', 'F'];
my $insert2 = $db2->prepare('INSERT INTO truc2 (id, name, sex, year, parti)'
. ' VALUES (?, ?, ?, ?, ?)');
$insert2->execute(@$_) for [14, 'Lapin', 'A', 2014, 'MODEM'],
[33, 'Murène', 'F', 1347, 'EELV'],
[ 2, 'Ragondin', 'M', 4218, 'SP'],
[ 3, 'Koala', 'F', 1512, 'CPNT'];
my $query2 = $db2->prepare('SELECT id, name, sex, year, parti FROM truc2');
my $query1 = $db1->prepare('UPDATE truc'
. ' SET year = ?, parti = ? WHERE name = ?');
$query2->execute;
while (my @row = $query2->fetchrow_array) {
$query1->execute($row[3], $row[4], $row[1]);
}
my $verify = $db1->prepare('SELECT * from truc');
$verify->execute;
while (my @row = $verify->fetchrow_array) {
say "@row";
}
UPDATE database1.truc
JOIN database2.truc2 ON database1.truc.name = database2.truc2.name
SET database1.truc.year = database2.truc2.year
database1.truc.parti = database2.truc2.parti;
바인딩, 어레이에 데이터 복사, 손실 없음id
,기타.
언급URL : https://stackoverflow.com/questions/58873020/perl-compare-two-column-of-two-sql-query-from-2-databases
반응형
'sourcecode' 카테고리의 다른 글
JSON 오브젝트 작성 방법 (0) | 2023.01.10 |
---|---|
Javascript(글로벌 변수 포함)의 변수 선언 구문의 차이는? (0) | 2022.12.26 |
org.codehouse.com과 com.codexml.core의 비교 (0) | 2022.12.26 |
python을 사용하여 csv에 mysql 쿼리를 쓰는 경우 필드 이름을 표시해야 합니다. (0) | 2022.12.26 |
소스 및 JavaDoc을 사용하여 Snapshot을 도입하는 방법 (0) | 2022.12.26 |