交叉表查询sql语句

 更新时间:2007年06月29日 00:00:00   作者:  
表一:   
  组名   
  成员1id   
  成员2id   
  成员3id   

  示例数据:   
  冲锋组     1       2       3   
  后卫组     2       3       4   

  表二:   
  成员id   
  成员姓名   

  示例数据:   
  1     张三   
  2     李四   
  3     王五   
  4     陆二   

  要求结果     

  冲锋组     张三       李四       王五   
  后卫组     李四       王五       陆二  
复制代码 代码如下:

--建立测试环境   
  Create   Table   表1(组名   varchar(10),成员1id   varchar(10),成员2id   varchar(10),成员3id   varchar(10))   
  --插入数据   
  insert   into   表1   
  select   '冲锋组','1','2','3'   union   
  select   '后卫组','2','3','4'     
    Create   Table   表2(成员id   varchar(10),成员姓名   varchar(10))   
  --插入数据   
  insert   into   表2   
  select   '1','张三'   union   
  select   '2','李四'   union   
  select   '3','王五'   union   
  select   '4','陆二'     

  --测试语句   
    select   a.组名,   
  成员1=(select   成员姓名   from   表2   b   where   a.成员1id=b.成员id),   
  成员1=(select   成员姓名   from   表2   b   where   a.成员2id=b.成员id),   
  成员1=(select   成员姓名   from   表2   b   where   a.成员3id=b.成员id)   
  from   表1   a   

      
  --删除测试环境   
  Drop   Table   表1   
  Drop   Table   表2   

  /*   
  组名                   成员1                 成员1                 成员1                   
  ----------   ----------   ----------   ----------     
  冲锋组                 张三                   李四                   王五   
  后卫组                 李四                   王五                   陆二   

  (所影响的行数为   2   行)   
  */

复制代码 代码如下:

select     
          a.组名,   
          成员1   =   max(case   b.成员id   =   a.成员1id   then   b.成员姓名   end),   
          成员2   =   max(case   b.成员id   =   a.成员2id   then   b.成员姓名   end),   
          成员3   =   max(case   b.成员id   =   a.成员3id   then   b.成员姓名   end),   
  from     
          表一   a,   
          表二   b   
  group   by   
          a.组名

复制代码 代码如下:

select     
          a.组名,   
          成员1   =   max(case   b.成员id   =   a.成员1id   then   b.成员姓名   end),   
          成员2   =   max(case   b.成员id   =   a.成员2id   then   b.成员姓名   end),   
          成员3   =   max(case   b.成员id   =   a.成员3id   then   b.成员姓名   end)   
  from     
          表一   a,   
          表二   b   
  group   by   
          a.组名

复制代码 代码如下:

select   a.组名,   
                成员1=(select   成员姓名   from   表2   b   where   a.成员1id=b.成员id),   
                成员1=(select   成员姓名   from   表2   b   where   a.成员2id=b.成员id),   
                成员1=(select   成员姓名   from   表2   b   where   a.成员3id=b.成员id)   
  from   表一   a   

复制代码 代码如下:

正解是   
  select   表1.组名,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员1id=表2.成员id)   as   成员1id,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员2id=表2.成员id)   as   成员2id,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员3id=表2.成员id)   as   成员3id   
  from   表1,表2

相关文章

  • MySQL与Redis如何保证数据一致性详解

    MySQL与Redis如何保证数据一致性详解

    在高并发的业务场景下数据库大多数情况都是用户并发访问最薄弱的环节,所以就需要使用redis做一个缓冲操作,让请求先访问到redis,而不直接访问Mysql等数据库,这篇文章主要给大家介绍了关于MySQL与Redis如何保证数据一致性的相关资料,需要的朋友可以参考下
    2021-08-08
  • SQL数据库语句大全

    SQL数据库语句大全

    本篇文章详细整理了Access、MySQL以及SQL Server三种数据库语句。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 在telnet下操作memcache详解(操作命令详解)

    在telnet下操作memcache详解(操作命令详解)

    这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下
    2014-07-07
  • 深入SQL中PIVOT 行列转换详解

    深入SQL中PIVOT 行列转换详解

    T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列。
    2015-10-10
  • DBeaver一款替代Navicat的数据库可视化工具

    DBeaver一款替代Navicat的数据库可视化工具

    这篇文章主要介绍了DBeaver一款替代Navicat的数据库可视化工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • idea中连接数据库时出现SSL错误的问题

    idea中连接数据库时出现SSL错误的问题

    这篇文章主要介绍了idea中连接数据库是出现SSL错误的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • mybatis映射XML文件详解及实例

    mybatis映射XML文件详解及实例

    这篇文章主要介绍了mybatis映射XML文件详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • dbeaver工具连接达梦数据库的完整步骤

    dbeaver工具连接达梦数据库的完整步骤

    DBeaver数据库连接工具是我用了这么久最好用的一个数据库连接工具,拥有的优点,支持的数据库多、快捷键很赞、导入导出数据非常方便,下面这篇文章主要给大家介绍了关于dbeaver工具连接达梦数据库的完整步骤,需要的朋友可以参考下
    2023-05-05
  • SQL中代替Like语句的另一种写法

    SQL中代替Like语句的另一种写法

    SQL中代替Like语句的另一种写法...
    2006-12-12
  • Linux下mysql数据库的创建导入导出 及一些基本指令

    Linux下mysql数据库的创建导入导出 及一些基本指令

    这篇文章主要介绍了Linux数据库的创建 导入导出 以及一些基本指令,需要的朋友可以参考下
    2019-08-08

最新评论