【问题标题】:How to inner join two tables?如何内部连接两个表?
【发布时间】:2020-03-27 12:20:45
【问题描述】:

通过比较文件 1 和文件 2,将列 (col_F) 扩展到最终输出 (File3)。

Col_A 拥有 File1 和 File2 之间的关系。我必须使用这种关系并将 col_F 中的值省略到 File3 中。

举个例子:

File1
col_A       col_F                          
 A1      F1
 A2      F2
 A5      F5
 AZ      FZ
 AX      FX
 A#      F#
 A2      F2


File2  
col_A  col_B      col_C   col_D
  A1    B        C       D
  A2    B        C       D
  A5    B        C       D
  AZ    B        C       D
  AX    B        C       D
  A#    B        C       D
  A2    B        C       D


File3_Final output (Query result) 
col_A  col_B    col_C   col_D   col_F
A1      B        C        D      F1
A2      B        C        D      F2
A5      B        C        D      F5
A       B        C        D      FZ
AX      B        C        D      FX
A#      B        C        D      F#
A2      B        C        D      F2


NOTE: All the Tables are saved in .csv format

【问题讨论】:

  • 你试过什么?为什么用 Perl 标记它?这与 MySQL 或 MongoDB 有什么关系?
  • 你说的是 CSV,但你说的是 SQL。是哪个?
  • @ikegami 我有两个 CSV 文件(file1 和 file1)/MySQL(我们可以将此 CSV 文件视为表(Table1 和 Table2)。如果可以帮助我编写 python 代码,那就太好了。
  • @Grinnz 在这里,我有点困惑,我知道我可以通过以下脚本使用我的 SQL 来解决这个问题
  • 我认为应该从这个问题中删除 MongoDB 标签,我将这样做。

标签: mysql python-3.x better-sqlite3


【解决方案1】:

您说您需要 Python、MySQL 或 MongoDB 中的解决方案。但是你已经用“perl”标记了这个问题。所以这里有一个 Perl 解决方案。

#!/usr/bin/perl

use strict;
use warnings;

my %file1 = get_file1();

open my $fh2, '<', 'File2' or die "File 2: $!\n";

chomp(my $header = <$fh2>);
print "$header\tcol_F\n";

while (<$fh2>) {
  chomp;
  my $colA = (split ' ')[0];
  print "$_\t$file1{$colA}\n";
}

sub get_file1 {
  my %hash;

  open my $fh1, '<', 'File1' or die "File 1: $!\n";

  <$fh1>; # skip headers
  while (<$fh1>) {
    chomp;
    my ($key, $val) = split ' ';
    $hash{$key} = $val;
  }

  return %hash;
}

【讨论】:

  • 出现以下错误,我该如何解决?在连接 (.) 中使用未初始化值或在 ./complier 第 16 行, 第 2 行使用未初始化值。在连接 (.) 中使用未初始化值或在 ./complier 第 16 行使用字符串,
  • @Jay:这不是错误,而是警告。这意味着 File2 包含一个未出现在 File1 中的 col_A 值。如何处理这种情况取决于您自己。
  • @Jay:这似乎是一个非常明显的错误 :-) 当前代码假定当您运行程序时两个输入文件都在当前目录中。如果不是这种情况,那么您需要调整两个 open() 调用中的路径。
  • 我会试试@Dave
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2011-01-28
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多