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