sourcecode

perl - 2개의 데이터베이스에서 2개의 SQL 쿼리로 이루어진 2개의 열을 비교합니다.

copyscript 2022. 12. 26. 20:33
반응형

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

반응형