从具有不同列名的两个不同表中查找唯一值

时间:2011-08-23 19:33:08

标签: php sql arrays

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

所以要解决问题。

查询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中获取结果并尝试按照我现在尝试的方式进行操作。

5 个答案:

答案 0 :(得分:1)

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

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

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

HTH

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

(query1)EXCEPT(query2)

编辑:oops,我看到它是mysql ...你可以尝试

query1 AND NOT EXISTS(query2)

虽然您可能必须在(query2)

之后移动订单

答案 3 :(得分:0)

在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 :(得分:0)

这也应该在纯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)