Учитывая две таблицы A и B в базе данных MySQL, как можно обновить поле в строке таблицы A тогда и только тогда, когда определенные поля в упомянутой выше строке в таблице A точно соответствуют полям в отдельной строке таблицы B. Строки таблицы B должны использоваться один раз и только один раз для каждого сравнения. Таким образом, строка в таблице B, которая имеет поля, соответствующие строке в таблице A, не может использовать коэффициент усиления для соответствия любой другой строке в таблице A.
Я пробовал
UPDATE
Table A,
Table B
SET
Table A.Status = 'MATCHED',
Table B.Status = 'USED'
WHERE
Table B.Status IS NULL
AND
Table A.Field1 = Table B.Field1
AND
Table A.Field2 = Table B.Field2
К сожалению, это не дает моих желаемых результатов, поскольку разные строки из таблицы A имеют тенденцию совпадать с той же строкой в таблице B.
Например: Таблица A
ID Date Ref Amount Status
1 2009-10-20 773 300000
2 2009-10-20 773 10000 MATCHED
3 2009-10-20 773 150000
4 2009-10-20 773 20000 MATCHED
5 2009-10-20 773 140000 MATCHED
Таблица B
Ref Amount Date ID
870 50000 2009-11-01 1
871 50000 2009-11-01 2
871 80000 2009-11-01 3
871 20000 2009-11-01 4
871 20000 2009-11-01 5
871 20000 2009-11-01 6
872 300000 2009-11-01 7
Для сопоставления с использованием Ref, Amount и Date.
Может ли быть так же просто, как добавлять исключения в предложение WHERE, чтобы избежать повторного использования?
AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'
Это будет работать, если каждая строка будет обновляться по очереди, но не будет установлена на основе и транзакционной. Приношу свои извинения за то, что не тестировал это; У меня нет MySQL здесь, чтобы попробовать это с помощью.
Добавьте дополнительные условия в предложение WHERE, чтобы заставить совпадение 1:1 между записями в tableA и tableB?