# Writing SQL query WHERE.. IN.. anArray?

**URL:** <https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267>\
**Category:** Rails\
**Created:** [November 8, 2006, 5:54pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267 "2006-11-08T17:54:12Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [November 8, 2006, 5:54pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267/1 "2006-11-08T17:54:12Z")

</div>

I have an array @dpt\_ids

ex : @dpt\_ids = [“43”, “48”, “49”, “50”, “51”]  
I try to insert it into my sql query to be used in a ‘find\_by\_sql’

```
  query = "SELECT * , #{kms} AS km FROM cities"
  query << " WHERE department_id IN ( #{dpt_ids} ) "

```

but this transform my array into a unique string : ’ 4348495051’

I also tried

query \<\< " WHERE department\_id IN ( #{dpt\_ids.each {|d| p d }} ) "

same…

How could I get the following resulting query :  
WHERE department\_id IN ( “43”, “48”, “49”, “50”, “51” ) ???

thansk for your help

Kad

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [November 8, 2006, 6:03pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267/2 "2006-11-08T18:03:09Z")

</div>

And thinking of a nicer Rails-type way, try:

City.find(:all, :conditions =\> [“department\_id IN (?)”, dpt\_ids])

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [November 8, 2006, 5:59pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267/3 "2006-11-08T17:59:44Z")

</div>

Instead of:

> ```
> query << " WHERE department_id IN ( #{dpt_ids} ) "
> 
> ```

Try:

query \<\< " WHERE department\_id IN ( #{ dpt\_ids.join(’,’) } ) "

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [November 8, 2006, 6:11pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267/4 "2006-11-08T18:11:49Z")

</div>

> query \<\< " WHERE department\_id IN ( #{dpt\_ids.each {|d| p d }} ) "
> 
> same…
> 
> How could I get the following resulting query :  
> WHERE department\_id IN ( “43”, “48”, “49”, “50”, “51” ) ???

query \<\< " WHERE department\_id IN ( “#{dpt\_ids.join(’”,"’)}" )

Just make sure that dpt\_ids really contains integers only and not  
something malicious though.

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [November 8, 2006, 7:31pm UTC](https://www.ruby-forum.com/t/writing-sql-query-where-in-anarray/75267/5 "2006-11-08T19:31:29Z")

</div>

Philip H. wrote:

> > query \<\< " WHERE department\_id IN ( #{dpt\_ids.each {|d| p d }} ) "
> > 
> > same…
> > 
> > How could I get the following resulting query :  
> > WHERE department\_id IN ( “43”, “48”, “49”, “50”, “51” ) ???
> 
> query \<\< " WHERE department\_id IN ( “#{dpt\_ids.join(’”,"’)}" )
> 
> Just make sure that dpt\_ids really contains integers only and not  
> something malicious though.

It is best to just always use the [“WHERE department\_id IN (?)”,  
@dpt\_ids] form. Along with being safer, it is much easier to read.

-matthew
