2016-10-07 3 views
0

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

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 
+0

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

+0

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

+0

В вашем вопросе нет «обновления». 'count' - зарезервированное слово, это плохая идея использовать его в качестве имени столбца. Вам нужно «выбрать» счетчик «..» в вашем подзапросе. И, наконец, вы не присоединяетесь к этим двум таблицам и второму запросу, чтобы генерировать перекрестное произведение всех этих трех таблиц - это почти всегда ошибка –

ответ

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 
+0

Спасибо, он намного менее сложный, и он тоже работал! – puzeledbysql

0

Если вы хотите обновить 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 в table2, что не соответствует значения wk в calendar_table

+0

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

+0

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

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