Abfragen einer Datenbank mithilfe der IN-Klausel mit einem Slice in Go
Bei Datenbankabfragen ist es üblich, Ergebnisse basierend auf einer Teilmenge von Werten mithilfe von zu filtern die IN-Klausel. Bei der Arbeit mit einem Ganzzahlsegment in Go kann es jedoch schwierig sein, IN-Klauseln zu erstellen, die sowohl syntaktisch gültig als auch idiomatisch sind.
Betrachten Sie die folgende Abfrage, die versucht, unterschiedliche Titel aus zwei verbundenen Tabellen abzurufen. Die IN-Klausel wird mit dem Inhalt eines Slice namens artIds gefüllt:
<code class="go">inq := "6,7" //strings.Join(artIds, ",") rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
Die Fehlerbehandlung wurde der Kürze halber weggelassen. Die Abfrage schlägt fehl, weil Datenbank/SQL Argumente direkt an den Treiber übergibt, der abhängig von der Länge des Slice eine variable Anzahl von Bindvars erwartet.
Alternativ wird eine Abfrage, die eine statische IN-Klausel verwendet, erfolgreich ausgeführt:
<code class="go">rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (6,7)", inq)</code>
Eine Lösung für dieses Problem ist die Verwendung der SQLX-Bibliothek, die mehr Kontrolle über Datenbankabfragen bietet. Mit der Funktion sqlx.In können Abfragen mit IN-Klauseln verarbeitet und die erforderlichen Bindvars dynamisch erstellt werden:
<code class="go">var levels = []int{4, 6, 7} query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
Die resultierende Abfrage und die Argumente können dann zum Ausführen der vorbereiteten Anweisung verwendet werden. Durch die Verwendung der Funktion „sqlx.In“ wird sichergestellt, dass die Abfrage syntaktisch gültig ist und mit dem angegebenen Wertebereich effizient ausgeführt werden kann.
Das obige ist der detaillierte Inhalt vonWie frage ich eine Datenbank mit einer IN-Klausel mithilfe eines Slice in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!