2013-07-30 8 views
8

Ok, ich habe ein Problem mit dem Verbinden von 2 Tabellen (mit INNER JOIN). Erste Tabelle containts Kategorieliste, während die zweite Tabelle enthält „die Daten“MYSQL INNER JOIN mit möglichen leeren Feldern

ich so versucht (ecc für Fotoalben oder Blog-Posts.):

SELECT galeries_id, galeries_title, 
     photos.photos_id, photos.photos_gal_id, photos.photos_link 
FROM galeries 
INNER JOIN photos 
ON galeries.galeries_id=photos.photos_gal_id 
GROUP BY photos_gal_id 

Das gibt mir gerechtes Ergebnis, Fügen meine Tabellen schön, so wie ich es mit einer entscheidenden Ausnahme möchte.

Wenn Tabelle "Fotos" keine Zeile enthält, die "photos_gal_id" enthält (zum Beispiel "2"), gibt sie KEINE Kategorie (galeries_id, galeries_title) für diese Kategorie zurück, auch wenn sie in Galerien giert Tabelle.

Es ist logisch, weil:

ON galeries.galeries_id=photos.photos_gal_id 

Jetzt muss ich diesen Teil übernehmen, mir zu zeigen sogar thoes, die eine ähnliche Zeile in der zweiten Tabelle

Das Ergebnis bin ich nicht haben zu bekommen versucht: ich

galeries_id  galeries_title  photos_id  photos_link 
    1    blabla    3   test.jpg 
    2    bla bla2          
    3    etata    5   test.jpg 

hoffe, ich erklärte es gut genug :) Danke ..

Antwort

20

Um die Zeilen von galeries ohne passende ID in Fotos zu behalten, müssen Sie Fotos auf galeries mit LEFT JOIN statt INNER JOIN beitreten:

SELECT galeries_id, galeries_title, 
     photos.photos_id, photos.photos_gal_id, photos.photos_link 
FROM galeries 
LEFT JOIN photos 
ON galeries.galeries_id=photos.photos_gal_id 
GROUP BY photos_gal_id 

 

Diese Sie geben:

galeries_id  galeries_title  photos_id  photos_link 
    1    blabla    3   test.jpg 
    2    bla bla2   NULL   NULL     
    3    etata    5   test.jpg 

 

Und wenn Sie wi sh NULL mit einem leeren String zu ersetzen, können Sie verwenden:

SELECT 
    IFNULL(photos.photos_id, ''), 
    IFNULL(photos.photos_link, '') 
+0

Vielen Dank dafür ... es war genau das, was ich brauchte. – wordman

+0

Was ist, wenn ich nur die Zeile mit photos_id = null erhalten möchte –

1

Wäre es nicht gerade ein

LEFT JOIN photos 

werden, da Sie die Datensätze reguardless von Hammel wollen oder nicht, sie gefüllt sind?