#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: тогда ваши данные образца не имеют смысла (по крайней мере, для меня)