обновление с использованием подзапроса, вызывающего ошибку

#sql #postgresql #subquery

#sql #postgresql #подзапрос

Вопрос:

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

   select  a.ik , a.date , d.count
  from Table1 a , Table2 b ,
  ( select count from Table2 b
   where b.ik = a.ik and wk in 
   ( select wk from calendar_table c,Table1  where c.calendar_date = Table1.date)) as d 
  

таблица 1

     ik,           , date
    133;0;"002996";"2014-06-26"
     11;0;"003406";"2014-06-22"
  

таблица 2

      ik, wk , count
     368;201605;0
     377;201438;0
  

calendar_table

    date, wk
   "2013-08-15";201329
    "2019-09-05";201932
  

Комментарии:

1. Я получаю эту ошибку после ее выполнения «подзапрос в FROM может не относиться к другим отношениям того же уровня запроса»

2. Можете ли вы показать нам некоторые данные, которые есть в каждой таблице (всего несколько строк в каждой таблице)?

3. update В вашем вопросе нет. count это зарезервированное слово, использовать его в качестве имени столбца — плохая идея. Вам нужно select "count" .. в вашем подзапросе. И, наконец, вы не объединяете эти две таблицы и подзапрос, чтобы генерировать перекрестное произведение всех этих трех таблиц — это тоже почти всегда ошибка

4. Я собираюсь создать таблицу с этим выбором и позже обновить один столбец в другой таблице….

5. Итак, какую таблицу следует обновить? table1 или table2 ?

Ответ №1:

 select  a.ik , a.date , b.count
  from Table1 a
  join Table2 b on b.ik=a.ik
  join Calendar_table c on c.calendar_date=a.date
  

Ответ №2:

Если вы хотите обновить table1, это должно сделать что-то вроде этого:

 update table1
  set "count" = t.cnt
from (
  select t2.ik, c.date, t2."count" as cnt
  from table2 t2
    join calendar_table c on c.wk = t2.wk
) t
where table1.ik = t.ik;
  

С вашими образцами данных это ничего не обновит, потому что нет wk in table2 , который соответствует wk значениям в calendar_table

Комментарии:

1. это не сработает, потому что это обновит таблицу1 (которая находится на ежедневном уровне), в которой будут совпадать только значения для одной даты за эту неделю, я хочу воспроизвести еженедельное значение (количество) для всех 7 дат за эту неделю, для каждого элемента в ежедневной таблице …. спасибо!

2. @puzeledbysql: тогда ваши данные образца не имеют смысла (по крайней мере, для меня)