Linker Join mit gefilterter linker Tabelle
Diese Frage befasst sich mit dem Abrufen von Daten aus zwei Tabellen, wobei eine WHERE-Klausel in der linken Tabelle verhindert, dass die erwarteten Ergebnisse auftreten. Das Ziel besteht darin, alle Standardeinstellungen aus der Einstellungstabelle und, sofern verfügbar, alle rollenspezifischen benutzerdefinierten Einstellungen für eine bestimmte Rolle abzurufen.
Ursprüngliche Anfrage:
<code class="language-sql">SELECT `settings`.*, `character_settings`.`value` FROM (`settings`) LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` WHERE `character_settings`.`character_id` = '1' </code>
Diese Abfrage gibt jedoch nur Zeilen zurück, in denen es eine passende zeichenspezifische Einstellung für das angegebene Zeichen gibt (character_id = 1). Um Standardeinstellungen einzubeziehen (auch wenn keine rollenspezifischen Einstellungen vorhanden sind), sollte die WHERE-Klausel in die Verbindung selbst verschoben werden:
<code class="language-sql">SELECT `settings`.*, `character_settings`.`value` FROM `settings` LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` AND `character_settings`.`character_id` = '1' </code>
Diese geänderte Abfrage führt nun effektiv einen Left-Join durch, bei dem die linke Tabelle (Einstellungen) nicht nach Kriterien gefiltert wird. Daher ruft es alle Standardeinstellungen ab und schließt optional alle rollenspezifischen Einstellungen ein, falls vorhanden.
Das obige ist der detaillierte Inhalt vonWie führt man einen Links-Join mit einer gefilterten rechten Tabelle richtig aus, um alle Standardeinstellungen und optionalen benutzerdefinierten Einstellungen abzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!