How do you use the “WITH” clause in MySQL?

前端 未结 7 1332
耶瑟儿~
耶瑟儿~ 2020-11-22 04:02

I am converting all my SQL Server queries to MySQL and my queries that have WITH in them are all failing. Here\'s an example:

WITH t1 AS
(
              


        
7条回答
  •  感动是毒
    2020-11-22 04:39

    'Common Table Expression' feature is not available in MySQL, so you have to go to make a view or temporary table to solve, here I have used a temporary table.

    The stored procedure mentioned here will solve your need. If I want to get all my team members and their associated members, this stored procedure will help:

    ----------------------------------
    user_id   |   team_id
    ----------------------------------
    admin     |   NULL
    ramu      |   admin
    suresh    |   admin
    kumar     |   ramu
    mahesh    |   ramu
    randiv    |   suresh
    -----------------------------------
    

    Code:

    DROP PROCEDURE `user_hier`//
    CREATE DEFINER=`root`@`localhost` PROCEDURE `user_hier`(in team_id varchar(50))
    BEGIN
    declare count int;
    declare tmp_team_id varchar(50);
    CREATE TEMPORARY TABLE res_hier(user_id varchar(50),team_id varchar(50))engine=memory;
    CREATE TEMPORARY TABLE tmp_hier(user_id varchar(50),team_id varchar(50))engine=memory;
    set tmp_team_id = team_id;
    SELECT COUNT(*) INTO count FROM user_table WHERE user_table.team_id=tmp_team_id;
    WHILE count>0 DO
    insert into res_hier select user_table.user_id,user_table.team_id from user_table where user_table.team_id=tmp_team_id;
    insert into tmp_hier select user_table.user_id,user_table.team_id from user_table where user_table.team_id=tmp_team_id;
    select user_id into tmp_team_id from tmp_hier limit 0,1;
    select count(*) into count from tmp_hier;
    delete from tmp_hier where user_id=tmp_team_id;
    end while;
    select * from res_hier;
    drop temporary table if exists res_hier;
    drop temporary table if exists tmp_hier;
    end
    

    This can be called using:

    mysql>call user_hier ('admin')//
    

提交回复
热议问题