Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przekazać wycinek [] do warunku IN w przygotowanej instrukcji SQL również z warunkami innymi niż IN?

Jest jednak rozwiązanie. Po pierwsze, ponieważ możemy tylko mają jeden parametr exploding i żadnych innych, powinniśmy najpierw umieścić nasze parametry w jednym []slice :

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

Ponieważ SQL nie rozwija się samoczynnie, rozwińmy tę pętlę:

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

Zakładając SubTypes zawiera []int{1,2,3} , inCondition powinien teraz zawierać ?, ?, ? .

Następnie łączymy to z naszą instrukcją SQL i rozkładamy argument:

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

Oczywiście byłoby całkiem fajnie, gdybyś mógł po prostu przekazać []slice s do przygotowanych zestawień i automatycznie rozwijanych. Ale może to dać nieoczekiwane wyniki, jeśli masz do czynienia z większą liczbą „nieznanych” danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pusta strona po stronie administratora Opencart

  2. Ostrzeżenie:nawiązywanie połączenia SSL bez weryfikacji tożsamości serwera nie jest zalecane

  3. Jedna tabela Mysql z wieloma kolumnami TIMESTAMP

  4. Jak uzyskać rekord z maksymalną wartością w MySQL?

  5. Jak wersjonować schemat bazy danych?