Заявка за условно актуализиране на SQL MS Access, препращаща към други таблици

Намокрям краката си в SQL, особено поради проблема, върху който работя сега, знам как бих изпълнил задачата, използвайки референтна формула Countif в Excel, но тъй като имам работа с близо 1 милион записа, Excel поддържа бомбардираха ме и SQL изглеждаше като по-ефективно средство за изпълнение на задачата.

Фон:

По принцип имам "обобщена" таблица като тази:

 ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)

След това имам 4 таблици, всяка от които съответства на 2009, 2010, 2011 и 2012 г. само с две колони във всяка таблица ID_num и дата.

2009(ID_num,date)

Таблицата ID_summary има изчерпателен списък на всички уникални идентификатори, които съществуват в четиригодишните таблици. Създадох този списък чрез съюзи на четиригодишната таблица.

Проблемът:

Искам да напиша заявка за актуализиране (?), за да попълня таблицата ID_summary с „TRUE“ или „1“ за всяка колона „exists_20XX“, за всеки запис, ако идентификационният номер се появява в съответните таблици за години.

Например, ако ID 002 се появява само през 2009 и 2012 г., тогава редът за ID 002 в обобщената таблица трябва да изглежда така

ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)
ID_002,TRUE,FALSE,FALSE,TRUE

Правил съм подобни основни заявки, за да направя известно почистване на данни и съм постигнал успешни резултати, но винаги е било просто препращане към други полета в същата таблица, за да се определи дали едно поле трябва да бъде прекодирано.

Използвам MS Access 2010.

Всяка помощ е високо ценена!


person smk081    schedule 14.12.2013    source източник


Отговори (1)


Добре, проверих тук.

http://msdn.microsoft.com/en-us/library/office/bb221186%28v=office.12%29.aspx

Изглежда, че синтаксисът може да е малко по-различен
за MS Access отколкото за SQL Server.

Опитайте тези две в този ред:

update ID_summary
set exist_2009 = 0 -- false

update
ID_summary ids
left join table_2009 t on ids.ID_num = t.ID_num
set
ids.exist_2009 = 1 -- true
where
(t.ID_Num is not null)

Ако беше SQL Server, ще трябва
да се използва малко по-различен синтаксис.
Но тук говорим за MS Access.

update ids
set
ids.exist_2009 = 0 -- false
from
ID_summary ids

update ids
set
ids.exist_2009 = 1 -- true
from
ID_summary ids
left join table_2009 t 
on ids.ID_num = t.ID_num
where
(t.ID_Num is not null)
person peter.petrov    schedule 14.12.2013