2013-03-08 3 views
0

У меня есть следующие две таблицы (Tab1 and Tab2), где мне нужно проверить значения несоответствия T1Col3 и T2Col3. Link столбцы этих двух таблиц T1Col1, T1Col2 с T2Col2, T2Col2Найти записи несоответствий

Но когда я запускаю следующий запрос Это не дает точных записей, которые я хочу

SELECT * FROM Tab1 INNER JOIN Tab2 
ON T1Col1 = T2Col1 
AND T1Col2 = T2Col2 
WHERE T1Col3 <> T2Col3 

Выборочные данные

Tab1

T1Col1 T1Col2 T1Col3 

jkl nnn qoq 
efg Aaa wow 
efg xxx yoy 
abc iii ror 
abc fff uou 
abc rrr rr3 
gdg ppp 123 
abc www 234 
jkl qqq 336 
jkl nnn 888 

Вкладка2

T2Col1 T2Col2 T2Col3 

jkl nnn qoq 
efg aaa wow 
efg xxx yoy 
abc fff uou 
ABC iii ror1 
abc rrr kok 
gdg ppp 789 
jkl nnn utu 
jkl qqq 336 

Результат

T1Col1 T1Col2 T1Col3 T2Col1 T2Col2 T2Col3 

jkl  nnn 888  jkl nnn  qoq 
abc  iii ror  abc iii  ror1 
abc  rrr rr3  abc rrr  kok 
gdg  ppp 123  gdg ppp  789 
jkl  nnn 888  jkl nnn  utu 
jkl  nnn qoq  jkl nnn  utu  

Ненужные записи выше результатов

jkl nnn 888 jkl nnn qoq 
jkl nnn qoq jkl nnn utu 

Как я могу избавиться от выделенных записей. Я думаю, что это происходит из-за одинаковые повторяющиеся записи

Cheers

Shabar

ответ

0

Вам просто нужно третьи и внутреннее соединение, если вы хотите, чтобы удалить несоответствующий третий столбец:

SELECT * FROM @Tab1 INNER JOIN @Tab2 
ON T1Col1 = T2Col1 
AND T1Col2 = T2Col2 
AND T1Col3 = T2Col3 

Update:

Select * From 
(
    Select * From tab1 
    Except 
    Select * From tab2 
)tbl 
Inner Join 
(
    Select * From tab2 
    Except 
    Select * From tab1 
)t2 
On tbl.T1Col1=t2.T2Col1 
And tbl.T1Col2=t2.T2Col2 

Для MS Access

Select * From 
(
    Select t1.* From Tab1 t1 
    Left Join Tab2 On t1.T1Col1=T2Col1 And t1.T1Col2=T2Col2 And t1.T1Col3=T2Col3 
    Where T2Col1 Is Null And T2Col2 Is Null And T2Col3 Is Null 
)tbl 
Inner Join 
(
    Select t2.* From Tab2 t2 
    Left Join Tab1 t1 On t1.T1Col1=t2.T2Col1 And t1.T1Col2=t2.T2Col2 And t1.T1Col3=t2.T2Col3 
    Where t1.T1Col1 Is Null And t1.T1Col2 Is Null And t1.T1Col3 Is Null 

)t2 
On tbl.T1Col1=t2.T2Col1 
And tbl.T1Col2=t2.T2Col2 
+0

Спасибо вам ответить Кен. В основном мне нужно получить значения missmatch в 'Col3' – shabar

+0

Тогда ваш запрос работает отлично. Он возвращает записи, где третий столбец не соответствует. Тогда где проблема? –

+0

«jkl nnn 888» подходит два раза, потому что у вас есть две записи «jkl \t nnn \t utu» и «jkl \t nnn \t qoq» в tab2, где первые два столбца идентичны, но третий столбец отличается. –

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