ホームページ >バックエンド開発 >Golang >IN 句のスライスを使用して Go データベース クエリを実行するにはどうすればよいですか?

IN 句のスライスを使用して Go データベース クエリを実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 21:11:28500ブラウズ

How to Execute a Go Database Query with a Slice in the IN Clause?

Slice IN 句を使用した Golang データベース クエリ: 包括的な理解

質問:

次の Golang データベース クエリはなぜ行われるのかIN 句で int のスライスを使用すると失敗します:

<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>

回答:

この問題は、クエリに使用されるデータベース/SQL パッケージが、クエリを実行し、引数をデータベース ドライバーに直接渡します。このため、可変数の引数を含む IN 句を含むクエリの処理が困難になります。

指定されたクエリでは、?バインド変数は 1 つの引数に対応しますが、使用目的はスライスの artId の長さに基づいて複数の引数をバインドすることです。ただし、ドライバーはこれを正しく処理できません。

この問題に対処するには、データベース クエリをより詳細に制御できる sqlx パッケージを使用することをお勧めします。

を使用した解決策sqlx パッケージ:

<code class="go">var artIds = []int{6, 7}
query, args, err := sqlx.In("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?);", artIds)</code>

sqlx.In 関数はクエリを処理し、int のスライスに適切なバインド変数を生成して、クエリを正常に実行できるようにします。

このトピックの詳細については、InQueries に関する Godoc ドキュメントを参照してください。

以上がIN 句のスライスを使用して Go データベース クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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