нужна помощь для формирования оптимизированного запроса sql - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть запрос select с предложением where, и я хочу написать обновление для того же условия.

Но я не могу его сформировать.

Поэтому я получаю выходной результатSet и traverse resultSet для обновления таблицы [см. ниже]

Запрос на выборку:

select 
    a.businesskey, a.featurekey, c.businesskey, c.featurekey 
from 
    device a, 
    (select concat(‘customPrefix’,ipaddr,’]’) clmna, instance_id 
     from wirelessdevice) as b, 
    device c 
where 
    a.businesskey = b.clmna 
    and c.uniqueid = b.instance_id;

Текущий метод для обновления:

string strQuery = "select a.businesskey, a.featurekey, c.businesskey, c.featurekey from device a, (select concat(‘customPrefix’,ipaddr,’]’) clmna, instance_id from wirelessdevice) as b, device c where a.businesskey=b.clmna and c.uniqueid=b.instance_id;";
ResultSet resultSet = statement.executeQuery();
while(resultSet.hasnext()){
        String srcbkey = resultSet.getString(1);
        String srcFtrkey = resultSet.getString(2);
        String destBkey = resultSet.getString(3);
        String destFtrkey = resultSet.getString(4);
        String updateQuery = "update device set featurekey ='" + destFtrkey +"' where businesskey ='" + srcFtrkey +"';";
        statement.executeQuery(updateQuery);
}

можно ли написать один обновить запрос вместо рекурсивного прохождения набора результатов?

1 Ответ

1 голос
/ 23 февраля 2020

Да. Мне трудно следовать вашему коду, но он выглядит примерно так:

update device d
    set d.featurekey = concat('customPrefix', wd.clmna, wd.ipaddr, ']')
    from wirelessdevice wd
    where d.businesskey= wd.clmna and
          d.uniqueid= wd.instance_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...