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

エイリアスを使用したMySQLクエリINNERJOIN

    この場合、次のように実行できます;)単純なテーブルピボット。

    select
        users.id,
        users.slug,
        users.name,
        max(if(users_info.info_key = 'email', users_info.info_val, null)) as email,
        max(if(users_info.info_key = 'age', users_info.info_val, null)) as age
    from users
    inner join users_info
    on users.id = users_info.parent
    group by users.id
    

    SQLFiddleデモはこちら

    動的なinfo_keyがある場合 、これを行うには動的SQLが必要です。ここにサンプルを示します。

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(if(users_info.info_key = ''',
          users_info.info_key,
          ''', users_info.info_val, null)) as ',
          users_info.info_key
        )
      ) INTO @sql
    FROM users
    inner join users_info
    on users.id = users_info.parent
    ;
    
    SET @sql = CONCAT('select users.id, users.slug, users.name, ', @sql, ' FROM users
    inner join users_info group by users.id having email = \'[email protected]\'');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    SQLFiddleデモはこちら



    1. ダイレクトパスINSERTOracle

    2. 列データが重複している場合、mysqlは行を2回カウントしません

    3. プラグ可能なデータベースの名前を変更する

    4. LinuxでのDG40DBCデバッグツールとしてのstraceの使用