Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да предам []отрезка към IN-условие в подготвен SQL израз и с не-IN-условия?

Въпреки това има решение. На първо място, тъй като можем само имаме един-единствен експлодиращ параметър и никакви други, първо трябва да съберем нашите параметри в един []slice :

var params []interface{}
params = append(params, Type)
for _, subtype := range SubTypes {
  params = append(params, SubTypes)
}

Тъй като SQL няма да се разшири сам, нека разширим този цикъл:

var params []interface{}
params = append(params, Type)
inCondition := ""
for _, subtype := range SubTypes {
  params = append(params, SubTypes)
  if inCondition != "" {
    inCondition += ", "
  }
  inCondition += "?"
}

Ако приемем SubTypes съдържа []int{1,2,3} , inCondition сега трябва да съдържа ?, ?, ? .

След това комбинираме това с нашия SQL израз и експлодираме аргумента:

sqlstr := fmt.Sprintf(`SELECT *
  FROM foo
  WHERE type = ?
    AND subtype IN (%s)`, inCodition)
rows, err := sqldb.Query(sqlstr, params...)

Разбира се, би било много готино, ако можете просто да предадете []slice s към вашите подготвени изявления и автоматично разширен. Но това може да даде някои неочаквани резултати, ако имате работа с повече „неизвестни“ данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL свързва множество стойности от колона в една клетка

  2. Как мога да подобря тази заявка, за да избегна използването на вложени изгледи?

  3. Как да използвате MySQL Rollup

  4. вътрешно присъединяване и ефективност на клаузата къде in()?

  5. MySQL Дублиращи се редове