2017-12-05 1 views
0

Ich bin zwei Tabellen zusammen, eine "Fotos" -Tabelle und "Locations" -Tabelle. Jedem Ort kann ein Standardbild zugeordnet sein oder auch nicht, und falls dies der Fall ist, möchte ich diesen Foto-Namen zurückgeben. Wenn dies nicht der Fall ist, wird null zurückgegeben. Das Standardbild für jeden Ort (falls vorhanden) ist immer das Bild mit dem "PictureSort" -Wert von 1.MySQL JOIN, um den korrekten Wert von der Sekundärtabelle zurückzugeben

Von meinem ersten SQL-Versuch unten, wenn ich eine WHERE-Anweisung verwende, dann empfange ich die Null-Orte (wo für diesen Ort keine Fotos existieren).

SELECT a.LocationID, a.LocationName, b.PictureSort, b.PictureName 
FROM Locations AS a 
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID 
WHERE b.PictureSort = '1' 
GROUP BY a.LocationID 

Ich habe auch versucht die MIN() Funktion in mySQL mit zeigen, sagen Sie mir den niedrigsten Wert in der PictureSort Spalte, und während die für diese Spalte arbeitet, die Spalte rechts daneben Picture nicht folgt Anzug und den zugehörigen Wert an die PictureSort-Spalte zurückgeben.

SELECT a.LocationID, a.LocationName, MIN(b.PictureSort) AS PictureSort, b.PictureName 
FROM Locations AS a 
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID 
GROUP BY a.LocationID 

Jede Hilfe wird sehr geschätzt. Ich möchte, dass dies funktioniert, aber ich suche auch nach der kostengünstigsten Abfrage, um das zu erreichen.

Danke!

Antwort

1

Die Bedingungen für die zweite Tabelle sollten in der on Klausel für eine left join sein.

Auch Ihre Tabellen-Aliase sollten sich auf die Namen der Tabelle beziehen. Und die GROUP BY sollte nicht benötigt werden. Also versuchen Sie dies:

SELECT l.LocationID, l.LocationName, p.PictureSort, p.PictureName 
FROM Locations l LEFT JOIN 
    Photos p 
    ON p.LocationID = l.LocationID AND b.PictureSort = '1'; 

Wenn PictureSort als Nummer gespeichert ist, dann die einfachen Anführungszeichen fallen. Mischen Sie keine Datentypen.

Verwandte Themen