我有一个称为RECORDS的访问表,其中包含购买记录。
Id | Type | Price | Date | Processed |
------------------------------------------------------
1 | C | 30€ | 01/01/2016 | Null |
------------------------------------------------------
2 | R | -30€ | 01/01/2016 | Null |
------------------------------------------------------
3 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
4 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
5 | R | -10€ | 02/02/2016 | Null |
------------------------------------------------------
6 | C | 25€ | 03/02/2016 | Null |
------------------------------------------------------
7 | C | 42€ | 04/02/2016 | Null |
------------------------------------------------------
我想做的是将具有一对相反的退款记录(类型“ R”)的费用(类型“ C”)记录设置为True。
就像这样: 1C和1R =真
Id | Type | Price | Date | Processed |
------------------------------------------------------
1 | C | 30€ | 01/01/2016 | True |
------------------------------------------------------
2 | R | -30€ | 01/01/2016 | True |
------------------------------------------------------
3 | C | 10€ | 02/02/2016 | True |
------------------------------------------------------
4 | C | 10€ | 02/02/2016 | Null |
------------------------------------------------------
5 | R | -10€ | 02/02/2016 | True |
-----------------------------------------------------
6 | C | 25€ | 03/02/2016 | Null |
------------------------------------------------------
7 | C | 42€ | 04/02/2016 | Null |
------------------------------------------------------
到目前为止,我有这个设置,但它设置了所有N个费用“ C”记录均为
UPDATE
RECORDS AS T1
INNER JOIN RECORDS T2
ON ABS(T1.Price) = ABS(T2.Price) AND T1.Date =T2.Date
SET T1.Processed = TRUE
WHERE (T1.Type = 'C' AND T2.Type = 'R') OR (T1.Type = 'R' AND T2.Type = 'C')
答案 0 :(得分:1)
使用EXISTS
:
UPDATE RECORDS AS T
SET T.Processed = TRUE
WHERE
(T.Type IN ('C', 'R') AND
EXISTS (SELECT 1 FROM RECORDS
WHERE Type IN ('C', 'R') AND Type <> T.Type AND Date = T.Date AND Price + T.Price = 0
)
)
AND T.Id = (SELECT MIN(ID) FROM RECORDS WHERE Date = T.Date AND Price = T.Price AND Type = T.Type)
WHERE
中的最后一个条件包括Price
,Date
和Type
列中重复的情况。
结果:
Id Type Price Date Processed
1 C 30,00 1/1/2016 True
2 R -30,00 1/1/2016 True
3 C 10,00 2/2/2016 True
4 C 10,00 2/2/2016 NULL
5 R -10,00 2/2/2016 True
6 C 25,00 3/2/2016 NULL
7 C 42,00 4/2/2016 NULL