【问题标题】:Finding out the unique value from two different tables with different column names从具有不同列名的两个不同表中找出唯一值
【发布时间】:2011-08-23 19:33:07
【问题描述】:

我试图通过比较两个表结果集来查找唯一值。我尝试了许多解决方案,例如数组合并,数组唯一,但它没有百分百有效。

所以要解决问题。

查询 1:

SELECT field_ipe_case_numbers_value
FROM meiscontent_type_inbound_parts_entry
RIGHT JOIN meiscontent_field_ipe_case_numbers 
    ON meiscontent_type_inbound_parts_entry.nid = meiscontent_field_ipe_case_numbers.nid
WHERE field_ipe_invoice_number_nid =661
AND field_ipe_quality_status_value = "Usable Stock"
ORDER BY field_ipe_case_numbers_value DESC

结果集 1:

10695
10694
10693
10692
10691
10690
10689
10688
10687
10686
10685
10684
10683
10682
10681
10680
10679
10678

查询 2:

SELECT field_pnp_case_no_value
FROM meiscontent_type_packing_note_parts
RIGHT JOIN meiscontent_field_pnp_case_no 
    ON meiscontent_type_packing_note_parts.nid = meiscontent_field_pnp_case_no.nid
WHERE field_pnp_invoice_no_nid =661
ORDER BY field_pnp_case_no_value DESC

结果集 2:

10695
10694
10693
10692
10691
10690
10689
10688
10687
10686
10685
10684
10682
10681
10680
10679
10678

需要的是这两个结果集的区别。应该是 10683,但我得到的是 10686。

感谢您的关注,因为我正在尝试各种解决方案,希望有人对这个问题有更好的理解并提出可行的解决方案。我不能只使用 SQL 语句来解决它,而不是在 ARRAY 中获取结果并尝试像我现在尝试做的那样进行操作。

【问题讨论】:

  • 我使用 Mysql 作为数据库,使用 php 作为语言来执行这些操作。感谢您的所有建议,我将尝试所有建议并相应地报告。到目前为止我得到的结果是使用数组合并和数组唯一。再次感谢。
  • 伙计们,这个问题现在已经使用@Mike_c 和neowin.net/forum/topic/…提出的解决方案解决了

标签: php sql arrays


【解决方案1】:

如果您只是尝试合并和删除两个查询的结果,那么只需执行以下操作:

SELECT DISTINCT `value` FROM (
    SELECT `field_ipe_case_numbers_value` AS `value`
    FROM ...
    UNION
    SELECT `field_...` AS `value`
    FROM ...
)

【讨论】:

    【解决方案2】:

    如果您正在寻找 php 中的解决方案:

    array_diff ($array1 , $array2); 应该是正确的选择。

    http://nz.php.net/manual/en/function.array-diff.php

    HTH

    【讨论】:

      【解决方案3】:

      在 SQL 方面,这应该可以工作:

      SELECT field_ipe_case_numbers_value FROM <rest of first query>
      EXCEPT
      SELECT field_pnp_case_no_value FROM <rest of second query>
      

      这应该返回第一组中没有在第二组中找到的所有内容。 (必要时颠倒顺序。)

      【讨论】:

        【解决方案4】:

        这也应该可以在纯 SQL 中解决。一种天真的方法是这样做:

        select column from table a where column not in (select column from table b)
        union
        select column from table b where column not in (select column from table a)
        

        【讨论】:

          【解决方案5】:

          不确定您使用的是什么数据库,但您可以尝试:

          (查询1)除了(查询2)

          编辑:哎呀,我看到它是mysql...你可以试试

          query1 AND NOT EXISTS (query2)

          虽然您可能必须在 (query2) 之后移动订单

          【讨论】:

          • 这不是刚刚标记了 'mysql' 吗?
          • MySQL 返回一个空结果集(即零行)。 (查询耗时 0.0005 秒)
          • 为简单起见删除了 order by 子句,并作为空结果集。
          • 嗯...query1 AND field_ipe_case_numbers_value NOT IN (query2)怎么样
          • 谢谢 Mike 使用您在此处描述的相同方法解决了问题。礼貌:neowin.net/forum/topic/…。再次感谢您的帮助。
          猜你喜欢
          • 2017-11-11
          • 2017-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多