Как мне сопоставить три поля из двух таблиц, чтобы обновить одни и те же таблицы в случае совпадения
Вопрос
Учитывая две таблицы 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.
Например:Таблица А
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
Таблица В
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
Для сопоставления используйте Ссылку, Сумму и Дату.
Решение
Может ли это быть так же просто, как добавление исключений в предложение WHERE, чтобы избежать повторного использования?
AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'
Это сработает, если каждая строка обновляется по очереди, но не в том случае, если она основана на наборе данных и транзакционна.Приношу свои извинения за то, что не протестировал это;У меня здесь нет MySQL, чтобы попробовать это с помощью.
Другие советы
Добавить дополнительные условия в ваше предложение WHERE, чтобы принудительно установить соответствие 1: 1 между записями в TableA и TableB?