Как мне сопоставить три поля из двух таблиц, чтобы обновить одни и те же таблицы в случае совпадения

StackOverflow https://stackoverflow.com/questions/1755754

Вопрос

Учитывая две таблицы 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top