【问题标题】:Comparing two rows each from two tables in MySQL, displaying only negative results比较 MySQL 中两个表中的两行,仅显示否定结果
【发布时间】:2012-10-24 15:15:46
【问题描述】:

所以我有一个名为“HoldingQueue”的表,我想将两行与两个值进行比较,并返回与这两个值都不匹配的每一行。以下是内容示例:

* * * * * * * * * * * *
* ItemCode * Channel  *
* * * * * * * * * * * *
* 1PX1     * Test     *
* * * * * * * * * * * *
* 2PX1     * Test     *
* * * * * * * * * * * *
* 3PX1     * Test2    *
* * * * * * * * * * * *

还有查询:

SELECT * FROM HoldingQueue WHERE ItemCode<>"1PX1" AND Channel<>"Test";

这仅返回“3PX1 | Test2” - 我希望它返回不是“1PX1 | Test”的所有内容 - 所以“2PX1 | Test”也应该返回。

有什么想法吗?有点把我的头撞到墙上了。

编辑:好的,所以它正在使用 OR 处理小型数据集......但我刚刚意识到我遇到的问题。我正在尝试提取“ItemCode”和“Channel”以将其与另一个具有多个条目的表进行比较,但我现在意识到,因为该表上有多个条目,所以每件事都至少有一次资格值的集合。

我认为我的问题比这更复杂。

编辑 #2:知道了...

SELECT Channel, ItemCode FROM HoldingQueue H
WHERE NOT EXISTS
(SELECT * FROM SKUList S
    WHERE
        H.ItemCode=S.SKU
        AND
        H.Channel=S.Channel
) GROUP BY H.Channel,H.ItemCode;

我想要任何与第二个 SKUList 表中的任何内容都不匹配的项目。这做到了。将标记 Sergey Kudriavtsev 的答案,因为他确实正确回答了我最初的问题(忽略了我面临的大部分问题)

【问题讨论】:

    标签: mysql compare multiple-tables


    【解决方案1】:

    在您的查询中将AND 更改为OR,这样就可以了

    SELECT * FROM HoldingQueue WHERE ItemCode<>"1PX1" OR Channel<>"Test";
    

    【讨论】:

    • 嗯,这似乎适用于小样本,但不适用于我试图让它使用的较大数据集。我会更新我的主要帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多