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

Има ли начин за завъртане на редове към колони в MySQL, без да се използва CASE?

Връзката, която Kangkan предостави, ще ви покаже как да направите това, ако сте знаели имената на колоните предварително. Ще използваме същата логика, с изключение на използването на динамичен SQL за изграждане на израза. Има 2 части към всяко поле, което трябва да включите, полето в оператора select и подходящо съединение, за да получите стойността... така че ще трябва да изградим оператора в две части

Първо декларирайте 3 променливи, за да изградите това... Ще използвам @select, @join и @sql за този пример. Дайте на променливите първоначалните стойности

 set @select = 'select user_id,'
 set @join = 'from table t'

сега декларирайте и заредете курсор с отделните стойности в полето table.key. Ще използвам @field, тъй като променливата се попълва с отделното поле table.key. След това преминете през него, като изградите двете променливи:

 set @select = @select + ', ' + @field + '.value as '[email protected]+'
 set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id

(обединението е проектирано да използва стойността в @field като псевдоним на таблицата)

преминете през курсора си, изграждайки @select и @join. В края на цикъла:

set @sql = @select + @join + 'where clause if you want'
exec @sql

Динамичният SQL, изграден по този начин, може да бъде абсолютна мъка за отстраняване на проблеми (и да се оправи) и да отвори проблеми със сигурността... но това е единственият начин, по който мога да видя това постигнато. Внимавайте за ограничения на размера на вашите променливи.... ако имате твърде много различни ключове там, променливите стават твърде големи. Съжалявам, че не мога да бъда по-точен с псевдонима за това...ще откриете, че изграждането на динамичен sql в sql е старателно.




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

  2. PHP PDO как да стартирате заявка за множество заявки?

  3. Как избягвате конфликти в имената на колони?

  4. Как да получите списък с бази данни?

  5. Как работи функцията FROM_BASE64() в MySQL