2016-05-12 8 views
-1

habe ich mich gefragt, ob sich die Ergebnisse in Abfragen mit mehreren Join-Tabellen ändern würden.SQL-Logik: Beim Verbinden der untergeordneten Tabelle B mit der übergeordneten Tabelle A von A.FID = B.ID

Wenn Sie übergeordnete Tabelle haben A

A   B 
ID|FID  FID 
    1|2  1 
    2|4  2 
    3|5  3 
    4|7  4 
    5|8  5 
    6|NULL 6 
    7|NULL 7 
    8|NULL 8 

macht es aus, welcher Tabellenspalte in der WHERE-Klausel angegeben? Zum Beispiel, was ist der Unterschied zwischen den beiden:

Select * 
From Table A 
Left Join B on A.FID = B.FID 
WHERE A.FID IN (2,5,8) 

Select * 
From Table A 
Left Join B on A.FID = B.FID 
WHERE B.ID IN (2,5,8) 

Sie für die Hilfe danken!

EDIT: Micheal meine Frage gelöst hat, und ich habe es

‚Eigentlich erprobt, während Sie Ihre Antwort ein gutes (und wahrscheinlich das, er sucht) ist, da seine beiden Abfragen im Wesentlichen sind Filterung auf dem Primärschlüssel von B (A.FID, B.ID) sind sie tatsächlich logisch identisch (unter der Annahme, dass A.FID eine echte Fremdschlüsselbedingung für B ist). Das heißt, beide Abfragen filtern Zeilen aus, in denen B.ID nicht 2, 5 oder 8 ist. - Michael L.

Es ist nur anders Tabelle B die Haupttabelle ist und abgefragten Sie basieren auf B.ID wie in:

SELECT * 
FROM B 
LEFT JOIN A ON A.FID = B.FID 
WHERE B.FID IN (2,5,8) 

Während dies die gleichen A als Haupttabelle sein wird, wie mit :

SELECT * 
FROM B 
LEFT JOIN A ON A.FID = B.FID 
WHERE A.FID IN (2,5,8) 
+1

haben Sie es versucht? –

+0

Mögliche Duplikate von [SQL JOIN und verschiedene Arten von JOINs] (http://Stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins) –

Antwort

5

Ja, tut es. Wenn Sie eine OUTER JOIN verwenden, können Werte aus einer der Tabellen NULL sein So ist die zweite Abfrage entspricht:

Select * 
From Table A Inner Join 
    B 
    on A.FID = B.ID 
WHERE B.ID IN (2, 5, 8); 

weil die NULL Werte herausgefiltert.

als allgemeine Regeln mit LEFT JOIN:

  • Filter auf der ersten Tabelle gehören in der WHERE Klausel.
  • Filter auf der zweiten und nachfolgenden Tabellen sollten in der ON Klausel.
+1

Eigentlich, während Ihre Antwort ist eine gute (und wahrscheinlich diejenige, die er sucht), da seine beiden Abfragen im wesentlichen nach dem Primärschlüssel von 'B' ('A.FID',' B.ID') filtern, sind sie tatsächlich logisch identisch (unter der Annahme, dass 'A .FID' ist eine echte Fremdschlüsseleinschränkung für 'B'). Das heißt, beide Abfragen filtern Zeilen heraus, in denen 'B.ID' nicht 2, 5 oder 8 ist. –

+0

Danke, Michael, A.FID ist der wahre Fremdschlüssel. Gibt es einen Text dazu? –

+0

Sie meinen Dokumentation über Joins? Pinal Daves [Einführung in SQL Joins] (http://blog.sqlauthority.com/2009/04/13/sql-server-introduction-to-joins-basic-of-joins/) ist ein guter Anfang. Die [Visual Representation of SQL Joins] (http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins) ist auch eine gute Referenz. –

Verwandte Themen