sql >> データベース >  >> RDS >> Mysql

MYSQL:連番表

    -- To use the bitwise solution you need a view of 2 to the power 25.
    -- the following solution is derived from http://stackoverflow.com/questions/9751318/creating-a-numbers-table-in-mysql
    -- the following solution ran in 43.8 seconds with the primary key, without it 4.56 seconds.
    
    -- create a view that has 2 to the power 25 minus 1
    
    -- 2 ^ 1
    CREATE or replace VIEW `two_to_the_power_01_minus_1` AS select 0 AS `n` union all select 1 AS `1`;
    
    -- 2 ^ 2
    CREATE or replace VIEW `two_to_the_power_02_minus_1` 
    AS select
       ((`hi`.`n` << 1) | `lo`.`n`) AS `n`
    from (`two_to_the_power_01_minus_1` `lo` join `two_to_the_power_01_minus_1` `hi`) ;
    
    -- 2 ^ 4
    CREATE or replace VIEW `two_to_the_power_04_minus_1` 
    AS select
       ((`hi`.`n` << 2 ) | `lo`.`n`) AS `n`
    from (`two_to_the_power_02_minus_1` `lo` join `two_to_the_power_02_minus_1` `hi`) ;
    
    -- 2 ^ 8
    CREATE or replace VIEW `two_to_the_power_08_minus_1` 
    AS select
       ((`hi`.`n` << 4 ) | `lo`.`n`) AS `n`
    from (`two_to_the_power_04_minus_1` `lo` join `two_to_the_power_04_minus_1` `hi`) ;
    
    -- 2 ^ 12
    CREATE or replace VIEW `two_to_the_power_12_minus_1` 
    AS select
       ((`hi`.`n` << 8 ) | `lo`.`n`) AS `n`
    from (`two_to_the_power_08_minus_1` `lo` join `two_to_the_power_04_minus_1` `hi`) ;
    
    -- 2 ^ 13
    CREATE or replace VIEW `two_to_the_power_13_minus_1`
    AS select
       ((`hi`.`n` << 1) | `lo`.`n`) AS `n`
    from (`two_to_the_power_01_minus_1` `lo` join `two_to_the_power_12_minus_1` `hi`);
    
    
    
    -- create a table to store the interim results for speed of retrieval
    drop table if exists numbers_2_to_the_power_13_minus_1;
    
    create table `numbers_2_to_the_power_13_minus_1` (
      `i` int(11) unsigned
    ) ENGINE=myisam DEFAULT CHARSET=latin1 ;
    
    -- faster 2 ^ 13
    insert into numbers_2_to_the_power_13_minus_1( i )
    select n from `two_to_the_power_13_minus_1` ;
    
    -- faster 2 ^ 12
    CREATE or replace view `numbers_2_to_the_power_12_minus_1`
    AS select
       `numbers_2_to_the_power_13_minus_1`.`i` AS `i`
    from `numbers_2_to_the_power_13_minus_1`
    where (`numbers_2_to_the_power_13_minus_1`.`i` < (1 << 12));
    
    -- faster 2 ^ 25
    CREATE or replace VIEW `numbers_2_to_the_power_25_minus_1`
    AS select
       ((`hi`.`i` << 12) | `lo`.`i`) AS `i`
    from (`numbers_2_to_the_power_12_minus_1` `lo` join `numbers_2_to_the_power_13_minus_1` `hi`);
    
    -- create table for results
    
    drop table if exists numbers ;
    
    create table `numbers` (
      `i` int(11) signed 
      , primary key(`i`)
    ) ENGINE=myisam DEFAULT CHARSET=latin1;
    
    -- insert the numbers
    insert into numbers(i)
    select i from numbers_2_to_the_power_25_minus_1
    where i <= 20000000 ;
    
    drop view if exists numbers_2_to_the_power_25_minus_1 ;
    drop view if exists numbers_2_to_the_power_12_minus_1 ;
    drop table if exists numbers_2_to_the_power_13_minus_1 ;
    drop view if exists two_to_the_power_13_minus_1 ;
    drop view if exists two_to_the_power_12_minus_1 ;
    drop view if exists two_to_the_power_08_minus_1 ;
    drop view if exists two_to_the_power_04_minus_1 ;
    drop view if exists two_to_the_power_02_minus_1 ;
    drop view if exists two_to_the_power_01_minus_1 ;
    


    1. 異なるサーバー上の2つの異なるデータベース間でOracleスキーマをコピーまたはインポートするにはどうすればよいですか?

    2. 文字列内の一意の文字の数を数える

    3. SQLServerの行オフセット

    4. docker-composeでローカルMySQLサーバーに接続できません