2015-11-29 2 views
0

Я пытаюсь написать код, который объединит информацию из 3 таблиц и сравните ее с «большой таблицей» и в соответствии с обновлением сравнения поле в тестовой таблице. Посмотрите на пример:Внутреннее соединение - более одной таблицы

большой стол:

Employee_Id status 
     2322   5 
     222   3 
     545   6 
     4532   2 

Таблица 1:

S_Id status 
2322 7 

Таблица 2:

S_Id status 
222  3 

Таблица 3:

S_Id status 
545  6 
4532 3 

испытаний Таблица:

TE_Id IsNotGood 
2322  1 
4532  1 
222  0 
545  0 

Идентификатор «2322» получил 1 потому, что статус в таблице 1 не нравится статус в большой стол и так же для 4532.

Я начал писать это:

update Test Table 
set isNotGood = 0 
with ids as (
    select distinct Employee_Id from (
    select Employee_Id,Status from BigTable as B 
    ) as T 
    inner join table1 as W on W.S_ID = T.Employee_Id 
    inner join table2 as K on K.S_ID = T.Employee_Id 
    inner join table3 as R on R.S_ID = T.Employee_Id  
    ) 

Я был бы рад за ваши советы, чтобы закончить этот запрос.

спасибо!

+0

Вы должны иметь определения КТР ** перед тем ** оператор обновления –

+2

Кроме того, не является ли это тот же самый вопрос, который вы просили сегодня: http://stackoverflow.com/questions/33983755/inner- join-of-more-than-one-table –

+0

Что такое cte? И, извините, я опубликовал еще одну запись, потому что я не знал, как ответить кодом и думал, что pepole не узнает редактирование. Я здесь новый. Благодаря. – oco

ответ

0

Вы не сможете использовать внутреннее соединение, если employee_id не находится во всех таблицах.

UPDATE Test 
SET isNotGood = 1 
WHERE te_id in (select employee_id 
from [Big Table] bt 
left join table1 as W on W.s_id = bt.employee_Id 
left join table2 as K on K.s_id = bt.employee_Id 
left join table3 as R on R.s_id = bt.employee_Id 
where (bt.status <> W.status and W.status is not null) or (bt.status <> K.status and k.status is not null) or (bt.status <> R.status and R.status is not null); 
Смежные вопросы