【问题标题】:How to find if A (1d array) is part of B (2d array)?如何查找A(一维数组)是否是B(二维数组)的一部分?
【发布时间】:2020-04-27 22:05:20
【问题描述】:

我可以老实说我已经出路了。

范围。我有两个数据库,其中有表。我想比较这些表是否匹配。

我的做法是:

  • 从 db1 table1 获取数据
  • 从 db2 table1 获取数据
  • 对于 db2 表 1 中的每一行,检查 db1 表 1 中是否存在该确切行

例子:

db1 表 1

  • id、column1、column2
  • 1, aa, bb
  • 2、cc、dd
  • 3, ee, ff

db2 表 1

  • id、column1、column2
  • 1, aa, bb
  • 3, ee, aa

id=1 的行将不会产生任何输出,因为它在 db1 table1 中与在 db2 table1 中完全相同。 id=2 的行将不会生成任何输出,因为它完全从 db2 table1 中丢失。 id=3 的行会产生错误,因为 column2 中的值在两个 db 之间是不同的。

我已经设法从两个数据库和表中提取数据,现在我将它们放在两个不同的变量中(二维数组?)。现在问题来了。

当我将内容写入主机时,db1 table1 看起来像这样:

@{id=1; column1=aa; column2=bb} @{id=2; column1=cc; column2=dd} @{id=3; column1=ee; column2=ff}

…为 db2 table1 精简一下:

@{id=1; column1=aa; column2=bb} @{id=3; column1=ee; column2=aa}

我的想法是做这样的事情:

foreach ($row in $db2table1) {
    if($db1table1.Contains($row)) {
        #all is good
    }
    else {
        #error
   }
}

但它不起作用。想法?

【问题讨论】:

  • 你不使用Compare-Object有什么特殊原因吗?

标签: sql arrays powershell contains


【解决方案1】:

Compare-Object 使这项任务更容易。您可以像这样执行检查:

$check = Compare-Object -ref $db1table1 -dif $db2table1
if ($check) { 
    "Error"
} else {
    "All Good"
}

默认情况下,Compare-Object 输出差异仅指示哪个对象有差异(SideIndicator 属性)。如果没有发现差异,则不输出任何内容。您可以使用-IncludeEqual-ExcludeDifferent 参数更改默认行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多