SQL INNER JOIN, LEFT JOIN und SET ANSI_NULL OFF
SQL Server 2005 T-SQL
Mhhh, also wie soll ich anfangen.... Am Besten nehmt Ihr Euch eine SQLExpress Edition 2005 und legt folgende Tabelle an.
CREATETABLE [dbo].[T_ID](
[ID] [int] NULL
)ON [PRIMARY]
Dann folgendes Statement ausführen ->
insertinto t_id (id) values(null)
Dann macht einfach mal folgendes select ->
select* from t_id where id =null
Super, nix wird selektiert, haben wir auch nicht anders erwartet
Und das soll spannend sein??? .....
Kategorie Mhhh, also wie soll ich anfangen.... Am Besten nehmt Ihr Euch eine SQLExpress Edition 2005 und legt folgende Tabelle an.
CREATETABLE [dbo].[T_ID](
[ID] [int] NULL
)ON [PRIMARY]
Dann folgendes Statement ausführen ->
insertinto t_id (id) values(null)
Dann macht einfach mal folgendes select ->
select* from t_id where id =null
Super, nix wird selektiert, haben wir auch nicht anders erwartet
Und das soll spannend sein??? .....
Dann machen wir die folgenden selects ->
select* from t_id t1 inner join t_id t2 on t1.id = t2.id
select* from t_id t1 left join t_id t2 on t1.id = t2.id
select* from t_id t1 left join t_id t2 on t1.id = t2.id where t1.id = t2.id
select* from t_id t1, t_id t2 where t1.id = t2.id
select* from t_id t1 where t1.id in (select id from t_id)
Bis auf das Zweite liefert keines ein Ergebnis, soweit so gut .....
und jetzt beginnt die Party
Wir machen, rischtisch! -> set ansi_nullsoff
jetzt bitte ->
select* from t_id where id =null
und richtig, es wird einen Zeile zurückgegeben.
Nun führen die 5 Statements noch einmal aus .... von der Theorie her könnten alle ein Ergebnis liefern
Aber zu meiner Überraschung nur 2 und 5!
Gruß JJR
P.S.: Woher kommt das? Any ideas?
select* from t_id t1 inner join t_id t2 on t1.id = t2.id
select* from t_id t1 left join t_id t2 on t1.id = t2.id
select* from t_id t1 left join t_id t2 on t1.id = t2.id where t1.id = t2.id
select* from t_id t1, t_id t2 where t1.id = t2.id
select* from t_id t1 where t1.id in (select id from t_id)
Bis auf das Zweite liefert keines ein Ergebnis, soweit so gut .....
und jetzt beginnt die Party
Wir machen, rischtisch! -> set ansi_nullsoff
jetzt bitte ->
select* from t_id where id =null
und richtig, es wird einen Zeile zurückgegeben.
Nun führen die 5 Statements noch einmal aus .... von der Theorie her könnten alle ein Ergebnis liefern
Aber zu meiner Überraschung nur 2 und 5!
Gruß JJR
P.S.: Woher kommt das? Any ideas?
Kommentare
eine nette Spielerei - auf solch eine Idee muss man erstmal kommen
So eine Art Erklärung könnte evt. diese Seite hier geben, wenn auch irgendwie nicht 100%ig:
{ Link }
Aber nebenbei bemerkt: "select* from t_id where id =null" ist eigentlich so nicht ganz korrekt bzw. Standard-konform, auf null sollte doch immer mit "is" geprüft werden...
Grüße,
Sebastian
Erstellt von Sebastian Stricker um 07:30:35 PM am 10/27/2009 | - Website - |
eine Erklärung ist es aber nur dahin, dass man das "is" benutzen sollte, da ANSI NULLS OFF nicht dem Standard entspricht, aber es sollte doch funktioniren,wenn speuifiziert
Gruß JJR
Erstellt von JakeJBlues um 07:55:28 AM am 10/30/2009 | - Website - |