插件窝 干货文章 mysql把一段数据变成一个临时表

mysql把一段数据变成一个临时表

phone 临时 class SELECT 465    来源:    2024-10-16

例子:有一组手机号,查询mysql库里有的是会员,没有的标记为非会员,按序号顺序显示

1. 先把一组手机号作为一个字段

SELECT '15555555555,12222222222' AS phone FROM DUAL 

效果:

2.把这个字段分割成一列数据

SELECT
    substring_index( 
        substring_index( a.phone, ',', b.help_topic_id + 1 ),
         ',', - 1 ) AS phone 
FROM
    ( SELECT '15555555555,12222222222' AS phone FROM DUAL ) a
    INNER JOIN mysql.help_topic b ON b.help_topic_id < (
        length( a.phone ) - length(
        REPLACE ( a.phone, ',', '' )) + 1 
    )

效果:

3. 关联对应的mysql数据库其他表,把字段对应好,查出来

SELECT
    aaa.phone '会员手机号',
IF
    ( ISNULL( mmm.phone ), '非会员', '会员' ) '是否会员' 
FROM
    (
    SELECT
        substring_index( 
            substring_index( a.phone, ',', b.help_topic_id + 1 ),
             ',', - 1 ) AS phone 
    FROM
        ( SELECT '15555555555,12222222222' AS phone FROM DUAL ) a
    INNER JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.phone ) - length( REPLACE ( a.phone, ',', '' )) + 1 )) aaa
    LEFT JOIN member mmm ON aaa.phone = mmm.phone

效果:

4.自带排序的序号

SELECT
  @1 := @1+1 AS '序号', 
    aaa.phone '会员手机号',
IF
    ( ISNULL( mmm.phone ), '非会员', '会员' ) '是否会员' 
FROM
    (
    SELECT
        substring_index( 
            substring_index( a.phone, ',', b.help_topic_id + 1 ),
             ',', - 1 ) AS phone 
    FROM
        ( SELECT '15555555555,12222222222' AS phone FROM DUAL ) a
    INNER JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.phone ) - length( REPLACE ( a.phone, ',', '' )) + 1 )) aaa
    LEFT JOIN member mmm ON aaa.phone = mmm.phone,(SELECT @1 := 0 ) r

效果:

如何将查询结果作为临时表

在MySQL中,我们可以利用子查询的方式将查询结果作为临时表。具体的步骤如下:

首先,我们需要编写一个查询语句,用于获取需要的数据。例如,我们要获取某个表中所有年龄大于18岁的用户,可以使用以下查询语句:

SELECT * FROM users WHERE age > 18;

接下来,我们需要将上述查询语句作为子查询,并使用CREATE TEMPORARY TABLE语句将其结果保存为临时表。例如,我们可以使用以下语句将查询结果保存为名为temp_table的临时表:

CREATE TEMPORARY TABLE temp_table AS (
    SELECT * FROM users WHERE age > 18
);

现在,我们可以像使用普通表一样使用临时表了。例如,我们可以对临时表进行排序操作:

SELECT * FROM temp_table ORDER BY age DESC;

最后,我们需要使用DROP TABLE语句删除临时表,以释放资源。例如,我们可以使用以下语句删除刚才创建的临时表:

DROP TABLE temp_table;

示例代码

以下是一个完整的示例代码,演示如何将查询结果作为临时表,并对临时表进行排序操作:

-- 创建临时表,并将查询结果保存为临时表
CREATE TEMPORARY TABLE temp_table AS (
    SELECT * FROM users WHERE age > 18
);

-- 对临时表按照年龄降序排序,并获取结果
SELECT * FROM temp_table ORDER BY age DESC;

-- 删除临时表
DROP TABLE temp_table;

到此这篇关于mysql把一段数据变成一个临时表的文章就介绍到这了,更多相关mysql 数据变成临时表内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!