ホームページ  >  記事  >  バックエンド開発  >  ## Go のデータベース/SQL でスライスを使用して IN クエリを処理するにはどうすればよいですか?

## Go のデータベース/SQL でスライスを使用して IN クエリを処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 12:42:30856ブラウズ

## How to Handle IN Queries with Slices in Go's Database/SQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。