2013-05-18 1 views
3

나는 "데이터베이스/SQL"패키지를 사용하여 이동이 같은 쿼리를 실행하고 싶습니다? 예를 들면, 나는 (물론 작동하지 않는)이 작업을 수행 할 수 :Go에서 IN 쿼리를 어떻게 수행합니까?</p> <pre><code>SELECT id, name FROM users WHERE id IN (1,2,3,4); </code></pre> <p>이 어떻게 쿼리 명령에서 변수 치환을 사용합니까 :

db.Query("SELECT id, name FROM users WHERE id IN (?)", []int{1,2,3,4}) 
+1

'db.Query ("... IN (?,?,?)", [] int {1, 2, 3})'는 작동합니까? ORM을 사용할 기회가 있습니까? – 9000

+0

데이터베이스 드라이버에 따라 다릅니다. 해당 설명서를 참조하십시오. 명시된 양식으로는 불가능할 수도 있습니다. – Volker

답변

2

@Volker는 일부 데이터베이스 드라이버가 당신을 위해 조각을 확장 할 수 있다는 의견에 제안합니다. 모든 드라이버는하지만, 개별적으로 슬라이스 요소를 처리 할 수 ​​

물론
db.Query("SELECT id, name FROM users WHERE id IN (?, ?, ?, ?)", 1, 2, 3, 4) 

, 당신은 아마 경우가 아니라 어떤 것을 쓸 때 슬라이스에있을 예정 정확히 얼마나 많은 요소 알아야 할 것 . 물음표의 정확한 수를 생성하는 것은 간단하다 당신에게 일반적인 솔루션 제공 : 당신의 조각이 비어있을 경우

ints := []interface{}{1,2,3,4} 
marks := strings.Repeat("?,", len(ints) - 1) + "?" 
db.Query("SELECT id, name FROM users WHERE id IN (" + marks + ")", ints...) 

, 당신은 어떻게 든 처리해야합니다.

+0

db.Query는'... int'가 아닌'... interface {}'를 사용합니다. 이것은'ints ... '를 현재 형태로 전달할 수 없다는 것을 의미합니다. 'ints : = [] int {1,2,3,4}'를'ints : = [] interface {} {1,2,3,4}'로 변경하면 의도 한대로 작동합니다. –

+0

@StephenWeinberg 아, 고마워. 업데이트 됨. –

관련 문제