Как мне найти три поля из двух таблиц, чтобы обновить те же таблицы в случае совпадения - PullRequest
0 голосов
/ 18 ноября 2009

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

Ответы [ 2 ]

1 голос
/ 02 января 2010

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

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

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

1 голос
/ 18 ноября 2009

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

...