Go のデータベース/SQL でスライスを使用した IN クエリを処理する
SQL クエリにデータベース/SQL パッケージを使用しているとき、開発者は次のような問題に遭遇することがあります。 IN 句とスライス引数を扱います。この問題は、データベース/SQL がクエリを検査せず、引数をドライバに直接渡すために発生します。
次の例を考えてみましょう:
<code class="go">inq := 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>
このクエリは、ステートメントとして準備された場合、機能しません。バインド変数「?」単一の引数に対応します。ただし、スライスの長さに基づいて可変の数の引数が必要です。試みられた解決策に見られるように、文字列の連結でこの問題に対処しようとすると、エラーが発生します。
SQLx パッケージを使用した解決策
sqlx パッケージは、より便利なまた、そのようなクエリを In 関数で処理する慣用的な方法もあります。クエリとスライスを引数として sqlx.In に渡すことで、データベースに送信する前にクエリを処理できます。
<code class="go">var levels = []int{4, 6, 7} query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
クエリが処理されると、生成されたクエリ文字列と引数を次のように使用できます。
詳細については、InQuery に関する情報については Godoc を参照してください。このアプローチを採用することで、開発者は Go プログラムでスライス引数を使用した IN クエリを効果的に処理できるようになります。
以上が## Go のデータベース/SQL でスライスを使用して IN クエリを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。