gpt4 book ai didi

mysql - 识别 2 个表中的不同行

转载 作者:行者123 更新时间:2023-11-29 03:08:02 25 4
gpt4 key购买 nike

假设我有两个结构相同的表,称它们为 A 和 B。此问题唯一需要关注的列是产品类型、价格和数量。

product_type 和 price 的每个组合可能会在每个表中重复多次,但数量不同。我试图在一个表中查找具有与另一个不同的总体积的组合实例。

这包括表 A 中的组合未在表 B 中表示的情况,反之亦然。

===================

例子:

表A:

ID   Product_type   Price  Volume
--- ------------ ----- ------
1 X $1 10
2 X $1 11
3 Z $2 10

表 B:

ID   Product_type   Price  Volume
-- ------------- ----- -------
1 X $1 21
2 Y $1 5
3 Z $2 7
4 Z $2 4

请注意,表 A 中 X @ $1 的总和为 21,这与表 B 相符。Y@$1 存在于表 B 中,但不存在于表 A 中。Z @ $2 出现在两个表中,但它们的体积总和不同。我希望查询返回违反规则的每个产品类型和价格组合(即 Y @ $1 和 Z @ $2)。

我试过使用 GROUP、UNION、DISTINCT、子查询和上述的各种组合,但似乎无法弄清楚。

最佳答案

我相信以下是您要找的。我为语法中奇怪的 where/not 道歉,concat 中的子查询这似乎是最可读的方法。

(
SELECT
"TableA",
TA.*

FROM TableA AS TA

WHERE CONCAT(product_type, price,
(SELECT SUM(volume) FROM TableA WHERE product_type = TA.product_type AND price = TA.price))

NOT IN (SELECT CONCAT(product_type, price, SUM(volume)) FROM TableB GROUP BY product_type, price)
)

UNION

(
SELECT
"TableB",
TB.*

FROM TableB AS TB

WHERE CONCAT(product_type, price,
(SELECT SUM(volume) FROM TableB WHERE product_type = TB.product_type AND price = TB.price))

NOT IN (SELECT CONCAT(product_type, price, SUM(volume)) FROM TableA GROUP BY product_type, price)
)

#ORDER BY <column>

输出:

TableA  ID  Product_type  Price  Volume
TableA 3 Z $2 10
TableB 2 Y $1 5
TableB 3 Z $2 7
TableB 4 Z $2 4

关于mysql - 识别 2 个表中的不同行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com