2010-12-11 5 views
0

Ich habe eine Tabelle in meiner DB ORDERS genannt, und es sieht wie folgt aus:MySQL - Wie mit einem nicht existierenden Index JOIN?

ID_section (int), ID_price (int), ID_city (int), ID_company (int)

Und ich möchte, dass die verwenden JOIN-Methode zum Festlegen von Namen für die IDs.

Was ich tun würde, ist:

SELECT * FROM ORDERS 
JOIN sections ON sections.id=orders.ID_section 
JOIN prices ON prices.id=orders.ID_price 
JOIN cities on cities.id=orders.ID_cities 
JOIN companies ON companies.id=orders.ID_company 

Aber der Punkt ist, dass in ORDERS kann Tabellenwert von 0 eingefügt werden, und es bedeutet - alle Abschnitte/Preise/Städte/Unternehmen, aber wenn ich laufen Meine Abfrage, nur die Werte, die ihre ID in der anderen Tabelle vorhanden sind, werden angezeigt.

Irgendwelche Ideen? Vielen Dank.

Antwort

0

Verwenden LEFT JOIN statt JOIN (das ist eine Abkürzung für INNER JOIN)

+0

Das ist nicht korrekt. Ein linker Join mit Rückgabe der Aufträge mit nichts anderem verbunden. Er will ** alles ** zugeordnet, wenn es eine 0 ID gibt. –

+0

So verstehen Sie es. Ich stehe zu meiner Antwort. – Mchl

+0

"Wert von 0 und es bedeutet - ** alle ** Abschnitte/Preise/Städte/Unternehmen" Ich verstehe daraus, dass er alles in dieser Kategorie übereinstimmen will, wenn die ID_ 0 ist. –

1

Wenn ich Sie verstehen Frage richtig und, zum Beispiel, bedeutet ID_section = 0, dass der Auftrag an alle Abschnitt gehört dann die folgende Abfrage sollte das tun Trick.

SELECT * FROM ORDERS 
JOIN sections ON sections.id=orders.ID_section OR orders.ID_section = 0 
JOIN prices ON prices.id=orders.ID_price OR orders.ID_price = 0 
JOIN cities on cities.id=orders.ID_cities OR orders.ID_cities = 0 
JOIN companies ON companies.id=orders.ID_company OR orders.ID_company = 0 

Wenn auf der anderen Seite, die Sie wollen, unabhängig alle Aufträge abrufen, wenn sie Abschnitte aufweisen, Preise etc. verbunden sind, dann ist es ausreichend, LEFT JOIN zu setzen, wo Sie JOIN haben. (Aber diese Situation ergibt sich nicht aus Ihrer Frage! Ich habe es nur hinzugefügt, weil die Leute das zu verstehen scheinen.)

+0

Dies ist nicht korrekt. Wie in der Frage angegeben, gibt es keine Zeilen mit ID = 0 in diesen Tabellen. : P – Mchl

+0

@Mchl Also? Wo siehst du mich nach 'id = 0'? Ich überprüfe nur nach 'ID_ ' ist 0. –

+0

Ja. Ich schrieb ID, anstatt vollständige Namen zu schreiben, um etwas Zeit zu sparen. – Mchl

0

Experimentieren Sie mit LEFT und RIGHT OUTER JOIN und Sie werden in der Lage sein herauszufinden, was Sie tun müssen. Grundsätzlich wird ein LINKER oder RECHTER ÄUSSERER JOIN NULLEN in Spalten einfügen, wo keine Daten existieren, aber immer noch die Joins.

Es gibt various resources im Internet, die dies erklären.