2017-12-07 2 views
0

Ich versuche, Daten aus zwei Tabellen zu ziehen, und ich habe auf JOINs hier und auf Google gelesen, aber nichts scheint richtig zu funktionieren.SQL: Joins mit einem OR?

Was ich brauche, ist aus einer Kundentabelle und einer Customertype-Tabelle zu ziehen. Hier ist der Kunde Tabellenlayout:

CustomerID: int PRIMARY KEY UNIQUE 
Customername: varstring 
Customeraddress: varstring 
Customertype: int 
Customerdescription: text 

Beispiel:

CustomerID: 1 
CustomernName: John Smith 
Customeraddress: 1 Fake St., New York, New York, 11111 
Customertype: 1 
Customerdescription: Customer makes a monthly purchase of this and that. 

Hier ist das Customer Layout:

TypeID: int PRIMARY KEY UNIQUE 
Typetitle: varstring 
Typedescription: text 

Beispiel:

TypeID: 1 
Typetitle: In good standing 
Typedescription: These customers are in good standing and owe nothing. 

Das Feld Typ in der Kundentabelle offensichtlich sh Dies entspricht dem Feld Typ in der Customertype-Tabelle. Also, wenn ich all John Smith Daten muß wissen, ich will, in einer Abfrage:

CustomerID: 1 
Customername: John Smith 
Customeraddress: 1 Fake St. New York, New York, 11111 
Typetitle: In good standing 
Customerdescription: Customer makes a monthly purchase of this and that. 

Der Haken ist, manchmal das Customer 0 ist, der zu jedem Datensatz in der Tabelle Customer nicht entspricht. Ihr Typ ist nicht definiert.

Ich habe über JOINs an verschiedenen Orten gelesen, aber ich kann nicht scheinen, um eine Abfrage zu machen, die sowohl die CustomerID = die TypeID oder wo die CustomerID = 0 behandelt. Hat jemand irgendwelche Vorschläge oder weiß was die Abfrage wäre?

Antwort

1

Diese Arbeit sollte:

SELECT c.CustomerID, c.Customername, c.Customeraddress, t.Typetitle, c.Customerdescription 
FROM Customer c 
LEFT JOIN customertype t ON c.Customertype = t.TypeID 

A LEFT JOIN nicht diejenigen herauszufiltern, die keine Übereinstimmung in der zweiten Tabelle haben. Sie können die gewünschten Spalten aus jeder Tabelle hinzufügen.

+0

Ich bekomme eine Fehlermeldung: '# 1142 - SELECT-Befehl für Benutzer "accounts" @ "localhost" für die Tabelle "customertype" abgelehnt. Meine Abfrage lautet wie folgt: 'SELECT customer.Id, customertype.Customertype FROM customer, customertype LINKE VERBINDUNG customer.Id customertype ON customer.CustomerType = customerType.TypeID' –

+1

Sie mischen 2 verschiedene Syntaxmethoden, um eine Abfrage zu korrigieren. Ändern Sie "FROM Kunde, Kundentyp" zu "FROM Kunde" und links verbinden wie in meiner Antwort. – isaace

+0

Boom! Sie sind ein Genie. Sie haben meinen Fehler in einem Augenblick entdeckt und die Abfrage funktioniert. Ich komme zurück und lassen Sie wissen, ob Ich bin später auf jeden Fall gestolpert, aber freundlicher Forum-User, ich verdanke dir einen Urlaubstruthahn. –

0

Sie können einen Ausdruck OR in Ihrer Join-Klausel verwenden. In Ihrem Fall müssen Sie einen linken Join durchführen. So etwas wie ...

SELECT * FROM Customer LEFT JOIN Type ON Customer.Customertype = Type.TypeID OR Customer.Customertype = 0 
+0

Dieser gibt mir nicht genau das, was ich brauche. Ich bekomme alle Kunden, aber für diejenigen mit Customertype = 0, bekomme ich ein Duplikat dieser Kunden, wo es sie für jeden customertype.TypeID auflistet. Zum Beispiel wird ein Kunde mit Customertype = 0 als customertype.TypeID 0 (im Rückstand), 1 (in gutem Ansehen), 2 (Kreditbetrag) usw. aufgeführt. –