2010-11-27 9 views
2

ich habe zwei Tabellen,Hilfe die Datenbank für die Gemäldegalerie Gebäude

a) Alben

alt text

b) Bilder

alt text

Ich verwende die folgende Abfrage Wählen Sie die albums.id, albums.cover_picture_id, pictures.url wo albums.cover_picture_id = pictures.id, ich möchte die folgenden Aufgaben ausführen wegen

select all the values from albums, aber es sollte auch die pictures.url mit Bezug zu holen

zum Zweck albums.cover_picture_id i Die folgende Anweisung SELECT

SELECT 
albums.id, 
albums.cover_picture_id, 
pictures.url 
FROM albums 
JOIN pictures 
ON 
(
albums.cover_picture_id = pictures.id 
) 

es funktioniert gut, aber ich habe mich mit ein Problem hier, die Tabellenentität albums.cover_picture_id kann den Wert 0 enthalten, der nicht in pictures.id existiert, also wird der Wert nicht abgerufen, wenn er 0 findet, würde ich alle Alben aus der Alben-Tabelle holen wollen, selbst wenn sie gefunden wird 0. Wie füge ich die Klausel in der Select-Anweisung hinzu.

danke

Antwort

3

Verwendung LEFT JOIN wie folgt aus:

SELECT 
albums.id, 
albums.cover_picture_id, 
pictures.url 
FROM albums 
LEFT JOIN pictures 
ON 
(
albums.cover_picture_id = pictures.id 
) 

Auszug aus Wikipedia:

Das Ergebnis eines linken äußeren Joins (oder einfach linken Joins) für Tabelle A und B enthält immer alle Datensätze der "linken" Tabelle (A), auch wenn die Join-Bedingung keinen übereinstimmenden Datensatz findet die "richtige" Tabelle (B). Das heißt, wenn die ON-Klausel mit 0 (Null) Datensätzen in B übereinstimmt, gibt der Join immer noch eine Zeile im Ergebnis zurück - aber mit NULL in jeder Spalte von B. Dies bedeutet, dass ein linker äußerer Join alle Werte von links zurückgibt Tabelle, plus übereinstimmende Werte aus der rechten Tabelle (oder NULL, falls kein übereinstimmendes Join-Prädikat vorhanden ist). Wenn die rechte Tabelle eine Zeile zurückgibt und die linke Tabelle mehr als eine passende Zeile dafür zurückgibt, werden die Werte in der rechten Tabelle für jede einzelne Zeile in der linken Tabelle wiederholt.

+1

danke shammit es löste mein Problem –

+0

Gern geschehen. – shamittomar

3

Versuchen Sie, Ihre JOIN-LEFT JOIN da Sie alle Datensätze aus albums selbst enthalten sein sollen, wenn es in pictures kein passender Datensatz ist:

SELECT 
albums.id, 
albums.cover_picture_id, 
pictures.url 
FROM albums 
LEFT JOIN pictures 
ON 
(
    albums.cover_picture_id = pictures.id 
)