Różnica w right join i inner join

0

Witam,

Mam pytanie o sposób działania joina.
Mam tabelę Table_1:

D1 D2
123 NULL
1a3 NULL
35s NULL
tg45 NULL

Jeżeli zrobię takie zapytanie:

select *
from Table_1 A
inner join (
select *
from Table_1 B
where
SUBSTRING(B.D1,len(B.D1)-1,100) NOT LIKE '%[^0-9]%') C
on A.D1=C.D1
WHERE convert(int,(SUBSTRING(A.D1,len(A.D1)-1,100)))<25;

Otrzymuję w wyniku jeden rekord
123 NULL 123 NULL
Jest OK.

Jeżeli zmienię right join na inner join to otrzymuję błąd:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value 'a3' to data type int.

Możecie mi to wytłumaczyć dlaczego tak się dzieje?

0

Błąd wynika z tego iż inner join nie łapie innego rekordu niż:

 
123    NULL    123    NULL

Right join łapie zaś rekord z wartością '1a3' gdzie po przetworzeniu próbujesz skonwertować do int wartość 'a3'. To nie przejdzie.

Tu różnice.

Inner join: http://www.w3schools.com/sql/sql_join_inner.asp
Right join: http://www.w3schools.com/sql/sql_join_right.asp

0

Inner join wyświetli Ci wszystkie rekordy, które według deklaracji złączenia znajdują się w obu zbiorach.
Left Join weźmie wszystkie rekordy z lewej tabeli i połączy ze wszystkimi pasującymi rekordami z prawej. Dla tych dla których nie będzie powiązania w prawej tabeli zostanie pokazany NULL.
Right odwrotnie, weźmie wszystkie z prawej strony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1