2016-03-22 5 views
2

Как я могу сделать следующий запрос и удалить в одном запросе?Запись SQL-удаления на основе оператора select

select krps.kpi_results_fk from report.kpi_results_per_scene krps inner join report.kpi_results kr on kr.session_uid = '0000c2af-1fc8-4729-bb2a-d4516a63107a' 
and kr.pk = krps.kpi_results_fk 

delete from report.kpi_results_per_scene where kpi_results_fk = 'answer from above query' 
+0

@sebastianbrosch INT –

+0

Помещенный выберите запрос внутри удаления запроса, так же, как это 'DELETE FROM ..... WHERE kpi_results_fk = (SELECT krps.kpi_results_fk FROM .....) '. Ваш запрос select должен возвращать только результат (1). Просто запустите, он возвращает больше, чем (1), положил ЛЮБОЙ, как этот 'УДАЛИТЬ ОТ ..... WHERE kpi_results_fk = ANY (SELECT krps.kpi_results_fk FROM .....)' – rhavendc

ответ

1

Я думаю, что для случая, NO нужно использовать inner join.

После запроса может снизить накладные расходы на inner join

DELETE FROM report.kpi_results_per_scene 
WHERE kpi_results_fk IN 
     (SELECT kr.pk FROM report.kpi_results kr 
      WHERE kr.session_uid = '0000c2af-1fc8-4729-bb2a-d4516a63107a') 
0

Попробуйте код ниже:

delete from report.kpi_results_per_scene 
where kpi_results_fk IN (select krps.kpi_results_fk 
         from report.kpi_results_per_scene krps inner join report.kpi_results kr 
         on kr.session_uid = '0000c2af-1fc8-4729-bb2a-d4516a63107a' 
         and kr.pk = krps.kpi_results_fk) 
1

использования в операторе:

delete from report.kpi_results_per_scene where kpi_results_fk in (
select krps.kpi_results_fk from report.kpi_results_per_scene krps inner join report.kpi_results kr on kr.session_uid = '0000c2af-1fc8-4729-bb2a-d4516a63107a' 
and kr.pk = krps.kpi_results_fk) 
+0

С каких пор in - это предложение? – sagi

Смежные вопросы