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

Instrukcja MySQL do tabeli przestawnej bez użycia funkcji przestawnej lub unii

Możesz użyć kursora

drop procedure if exists p;
delimiter $$
CREATE  PROCEDURE `p`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin 
    declare vid int(8);
    declare vname varchar(15);
    declare vsurname varchar(15);
    declare done int default 0;
    declare cname cursor for select id,name,surname from t id;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open cname;
    cursorloop:loop
    fetch cname into vid,vname,vsurname;
    if done = true then  
        leave cursorloop;
    end if;  
    insert into t1 (id,name) select vid,vname;
    insert into t1 (id,name) select vid,vsurname;
    end loop cursorloop;
    close cname;
end $$
delimiter ;

drop table if exists t,t1;
create table t( id int, name varchar(20), surname varchar(20));
create table t1(id int, name varchar(20));
insert into t values
( 1  , 'john'   , 'smith'),
( 2  , 'jack'   , 'brown');

call p();

MariaDB [sandbox]> select * from t1;
+------+-------+
| id   | name  |
+------+-------+
|    1 | john  |
|    1 | smith |
|    2 | jack  |
|    2 | brown |
+------+-------+
4 rows in set (0.00 sec)

Ale dlaczego nie miałbyś użyć związku?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możemy mieć nazwę tabeli jako opcję w MySQL?

  2. Uzyskaj ostatni odrębny zestaw rekordów

  3. Napraw za pomocą gdzie; Korzystanie tymczasowe; Korzystanie z sortowania plików

  4. Czy możemy kontrolować kolejność wyrażeń LINQ za pomocą Skip(), Take() i OrderBy()

  5. Czy narzędzie mysql CLI umożliwia wyświetlanie danych binarnych w sposób przyjazny dla konsoli?