【问题标题】:Create data set from multiple column and compare it with another data set从多列创建数据集并将其与另一个数据集进行比较
【发布时间】:2015-12-27 05:44:11
【问题描述】:

我在数据库中有 2 个表:table_1table_2

table_1 包含 3 列,即a_ida_zonea_address

table_2 包含 4 列,即p_idnot_usep_zonep_address

两个表中的行号不相同。我需要将 table_1 中 (a_zone, a_address) 的“数据集”与 table_2 中的 (p_zone, p_address) 进行比较。

让我举个例子:

Table1 contains:

a_zone  a_address
=================
1       8
2       9
3       6
4       9
5       2

Table2 contains:

p_zone  p_address
=================
1       8
2       9
3       6
4       9
5       8

现在我需要像这样比较 a_zone, a_address = p_zone, p_address 与否。

我不需要仅将 a_zone 与 p_zone 进行比较,或者仅将 a_addressp_address 进行比较。相反,我需要比较整个数据组合。对于我上面的例子,我需要比较 18 和 18 [a_zone,a_address WITH p_zone, p_address]

我被它困住了,真的需要帮助。请给我建议....:)

【问题讨论】:

  • 我不确定我的答案是否正确...如果不是,我会删除它...但是您希望如何进行比较?一行一行?
  • @fthiella,请您发表评论。是的,我想逐行比较。
  • 哦!对不起:(我应该在我需要如何比较数据之前告诉你。我需要将输出存储如下:
  • @kaild 没问题!但是 id 是否匹配?在您的示例中, (5,2) 是否与 (5,8) 具有相同的 ID?如果他们有,我可以更新我的答案并使其工作,如果他们没有....我认为仅用普通 Sql 回答是不可能的.. 但你可以使用一些 php 代码
  • @fthiella,感谢您抽出宝贵时间:) id 只是此处的序列号。由于两张表的行数不同,table_1 的 id 和 table_2 的 id 对所有行都不相同。

标签: php mysql database compare


【解决方案1】:

您还没有指定要返回的数据,所以我假设一个简单的连接。

除非我误解了您的查询,否则我认为您不需要联合我认为您可以通过单个联接来做到这一点:

SELECT *
 FROM table_1 JOIN table_2 
 WHERE (table_1.a_zone = table_2.p_zone) && (table_1.a_address = table_2.p_address);

这会返回:

【讨论】:

  • 太完美了!!而且,现在我需要指定不属于 table_1 但 DO 存在于 table_2 中的数据:)。我想,我需要像“INTERSECT”这样的东西
  • 我得到它使用这个“SELECT a_zone, a_address FROM alvis_input UNION SELECT p_zone, p_address FROM panel_input”并使用这个mysql_select_db(“magic”,$db_link)成功插入到另一个表中; $sql_1="INSERT INTO test (zone, address) SELECT a_zone, a_address FROM alvis_input UNION SELECT p_zone, p_address FROM panel_input"; if (!mysql_query($sql_1,$db_link)) { die('Error: ' . mysql_error()); }
  • 好的,很高兴您找到了解决方案。我不太确定这个答案与你原来的问题有什么关系,但很高兴知道你已经解决了。接受一个让您沿着正确路线工作的答案是个好主意
【解决方案2】:

如果我理解正确,你不能像这样做两个嵌套的while循环吗:

$query1 = get a_zone and a_address from table_1;
$query2 = get p_zone and p_address from table_2;

while($row = mysql_fetch_array($query1)) {
    $a_zone = $row['a_zone'];
    $a_address = $row['a_address'];
    while($row = mysql_fetch_array($query2)) {
        if($a_zone == $row['p_zone'] && $a_address == $row['p_address']) {
            do_something;
        }
    }
}

【讨论】:

    【解决方案3】:

    您可以从这样的查询开始:

    SELECT *
    FROM table_1 left join table_2
         on table_1.a_zone = table_2.p_zone
            and table_1.a_address = table_2.p_address
    UNION
    SELECT *
    FROM table_1 right join table_2
         on table_1.a_zone = table_2.p_zone
            and table_1.a_address = table_2.p_address
    

    然后你可以添加一些条件,像这样:

    SELECT *
    FROM table_1 left join table_2
         on table_1.a_zone = table_2.p_zone
            and table_1.a_address = table_2.p_address
    WHERE table_2.p_id is null or table_1.a_id <> table_2.p_id
    UNION
    SELECT *
    FROM table_1 right join table_2
         on table_1.a_zone = table_2.p_zone
            and table_1.a_address = table_2.p_address
    WHERE table_1.p_id is null or table_1.a_id <> table_2.p_id
    

    但这取决于您需要如何比较表格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 2015-08-02
      • 1970-01-01
      • 2012-09-12
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多