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

0

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

  • 0
    Не могли бы вы предоставить пример данных? Это может помочь другим ответить на ваш вопрос.
  • 1
    На первый взгляд кажется, что вам нужно объединение ... однако некоторые примеры данных, показывающие желаемые и неправильные результаты, могут помочь.
Показать ещё 1 комментарий
Теги:
algorithm
sorting
matching

2 ответа

1
Лучший ответ

Может ли быть так же просто, как добавлять исключения в предложение WHERE, чтобы избежать повторного использования?

AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'

Это будет работать, если каждая строка будет обновляться по очереди, но не будет установлена ​​на основе и транзакционной. Приношу свои извинения за то, что не тестировал это; У меня нет MySQL здесь, чтобы попробовать это с помощью.

  • 0
    Извините за задержку. это лучший ответ для этой конкретной проблемы.
1

Добавьте дополнительные условия в предложение WHERE, чтобы заставить совпадение 1:1 между записями в tableA и tableB?

  • 0
    Можете ли вы предложить дополнительные условия, пожалуйста?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню