2013-05-27 4 views
2

У меня есть таблицы A и B, каждый из них имеет один и тот же первичный ключ (Col1).Обновление строк в ResultSet из внутреннего соединения

 
Table A      Table B 
Col 1 | Col 2 | Col 3  Col 1 | Col 4 

Я хотел бы, чтобы обновлять строки в таблице B на основе информации из соответствующей строки в таблице A. Если бы я, чтобы получить набор результатов с внутренним соединением на два столов,

select A.Col1, A.Col2, A.Col3, B.Col4 from A inner join B on A.Col1=B.Col1;

Может ли я перебирать этот результат установить и обновить COL4 в таблице B? То есть, используя методы JDBC/ResultSet updateX (...)?

Я спрашиваю потому, что это кажется немного странным, чтобы обновить таблицу B из результирующего множества А присоединиться к B.


Разъяснение: Не уверен, если это будет иметь значение, но я m интересуется обновлением строк через интерфейс JDBC ResultSet, а не прямым запросом обновления MySQL. Спасибо за ответы!

+0

вы можете обновить с помощью объединения - но то, что вы хотите, чтобы обновить значение быть? – sgeddes

+0

Некоторые функции JDBC не всегда реализуются поставщиками баз данных. –

+0

@sgeddes: В Col3 есть строка, которую мне нужно сопоставить с Regex, и в зависимости от соответствия обновите Col4. – ktm5124

ответ

2

Вы должны быть в состоянии обновить TableB с помощью JOIN:

UPDATE TableB B 
    JOIN TableA A ON B.Col1=A.Col1 
SET B.Col4 = 'Some Value' 
WHERE A.Col2 REGEXP 'Some Regex' 

Не зная, что Regex вы хотите использовать и в том, что сценарий, и какое значение вы хотите обновить COL4 к, делает его немного трудно , но это должно быть довольно близко.

2

Это работает для меня:

UPDATE 
    B 
INNER JOIN 
    A ON B.id=A.id 
SET 
    B.value=A.value 

fiddle

Это скелет, обновить другие столбцы B в соответствии с вашими потребностями.

+1

Скорее всего, речь идет об использовании функциональных возможностей обновления Java 'ResultSet', где вы обновляете результаты, не вызывая запрос самостоятельно (либо драйвер делает это для вас, либо база данных поддерживает обновляемые результирующие множества) –

+0

@MarkRotteveel Ahh, ktm5124 добавил это разъяснение после того, как я дал ответ – user4035

0

Я наткнулся на этого, ища сценарий, в котором я хотел преобразовать некоторые данные и переместить их между таблицами.

Существует обходное решение с двумя проходами, но оно включает создание временных столбцов.

  • первых в целевой таблице, создать временную колонку полей, необходимую в процессе преобразования
  • вторых, использовать простое обновление SQL для заполнения этих столбцов из другой таблицы
  • Третьего использования обновляемого набора результатов сделать преобразование вы изначально хотели сделать
  • наконец удалить временные столбцы
Смежные вопросы