【发布时间】:2019-02-06 02:06:01
【问题描述】:
我有两张两张表,一张是临时表,另一张是主表。在进行最终处理之前,用户单击刷新按钮。然后我将数据填充到临时表中,如果两个表(如旧值 - 新值)之间存在任何差异,则需要向用户显示。为此,我尝试了以下查询,但无法获得旧值。我得到了 null
Temporay table
+------+--------------+----------------+-----+
| asn | ean | belegnr |quantity|
+------+--------------+----------------+-----+
| 700000845 | 4046228201122| 30059314 |2 |
| 700000845 | 4046228138879| 30059314 |3 |
| 700000845 | 4046228138875| 30059320 |25 |
+------+--------------+----------------+--+--+
主表
+------+--------------+----------------+-----+
| asn | ean | belegnr |quantity|
+------+--------------+----------------+-----+
| 700000845 | 4046228201122| 30059314 |5 |
| 700000845 | 4046228138879| 30059314 |3 |
| 700000845 | 4046228138888| 30059320 |25 |
+------+--------------+----------------+--+--+
从两个表中,我的 ean 字段和数量字段都有变化 为此,我正在使用此查询
SELECT
t2.id,t2.ean,t2.belegnr,t2.`quantity`,t1.`quantity` FROM
temp_table t2
LEFT OUTER JOIN details t1 ON
t1.asn = t2.asn
AND t1.ean = t2.ean
AND t1.belegnr = t2.belegnr
AND t1.quantity = t2.quantity
WHERE t2.asn = 700000845
AND t2.`belegnr` in(30059314,30059320)
AND t1.id IS NULL
以下是我的预期结果
+------+--------------+----------------+-----+----------------------
| asn | ean | oldean| belegnr |quantity|Oldqty|
+------+--------------+----------------+-----+----------------------|
| 700000845 | 4046228201122| 4046228201122 |30059314 |2 | 5 |
| 700000845 | 4046228138875| 4046228138888 |30059320 |25 | 25 |
+------+--------------+----------------+--+--+--------+-------------+
任何帮助将不胜感激。
【问题讨论】:
-
这些表中是否有链接条目的
id字段?否则你想要的结果是无法实现的(没有办法阻止它尝试匹配两个表中具有belegnr = 30059314的两行)。 -
@Nick,asn 编号在两个表中都很常见,id 也在两个表中
-
如果两个表中的 id 相同,则加入。
-
@danblack,没有 id 不一样。因为那是临时表,处理临时表中的数据将被刷新
-
您的问题无法像@Nick 所说的那样回答,没有可靠的连接标准。为什么您有一个临时表要与“旧版本”进行比较'也许可以解决。