问题是:查询 一个人   他选修了A课程 又选修了 B课程
名字 课程号
吴娟 A
吴娟 B
小明 A
小王 B
怎么用SQL找出这个人。。 

解决方案 »

  1.   

    select * from tb t 
    where 课程号 in('A','B')
      and exists(
        select 1 from tb 
        where 名字=t.名字 and 课程号 in('A','B')
          and 课程号<>t.课程号)
      

  2.   


    /*------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-17 13:50:56
    --  Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    Jul  9 2008 14:43:34 
    Copyright (c) 1988-2008 Microsoft Corporation
    Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)------------------------------------------------------------------*/
    --> 生成测试数据表:tbIF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([名字] NVARCHAR(10),[课程号] NVARCHAR(10))
    INSERT [tb]
    SELECT N'吴娟','A' UNION ALL
    SELECT N'吴娟','B' UNION ALL
    SELECT N'小明','A' UNION ALL
    SELECT N'小王','B'
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select distinct 名字 from tb t 
    where 课程号 in('A','B')
      and exists(
        select 1 from tb 
        where 名字=t.名字 and 课程号 in('A','B')
          and 课程号<>t.课程号)
    /*
    名字
    ----------
    吴娟(1 行受影响)
    */
      

  3.   

    IF OBJECT_ID('[tb]') IS NOT NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([名字] NVARCHAR(10),[课程号] NVARCHAR(10))
    INSERT [tb]
    SELECT N'吴娟','A' UNION ALL
    SELECT N'吴娟','B' UNION ALL
    SELECT N'小明','A' UNION ALL
    SELECT N'小王','B'
    GOSELECT * FROM [tb] a where [课程号] in('a','b')
    and exists(select 1 from tb where [课程号] in('a','b') and 名字=a.名字 and 课程号<>a.课程号)
    /*
    名字         课程号
    ---------- ----------
    吴娟         A
    吴娟         B(2 行受影响)*/
      

  4.   

    假设在XX表中,select distinct c1.名字 
    from XX.c1,xx.c2
    where c1.课程号=c2.课程号 and c1.课程号='A' and c2.课程号='B'
    方法就是  对于相同的表可定义不同的别名,以使它们作为不同的表使用
      

  5.   

    如果只有A、B两门课程的话,就更好办了
    select 名字 from tb group by 名字 having count(课程号)=2
      

  6.   

    --------------------SQL Server数据格式化工具-------------------
    ---------------------------------------------------------------
    -- DESIGNER :happycell188(喜喜)
    --       QQ :584738179
    -- Development Tool :Microsoft Visual C++ 6.0    C Language 
    -- FUNCTION :CONVERT DATA TO T-SQL
    ---------------------------------------------------------------
    -- Microsoft SQL Server  2005
    -- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
    ---------------------------------------------------------------
    ---------------------------------------------------------------use test
    go
    if object_id('test.dbo.tb') is not null drop table tb
    -- 创建数据表
    create table tb
    (
    名字 char(5),
    课程号 char(2)
    )
    go
    --插入测试数据
    insert into tb select '吴娟','A'
    union all select '吴娟','B'
    union all select '吴娟','C'
    union all select '小明','A'
    union all select '小王','B'
    union all select '小王','C'
    go
    --代码实现select 名字
    from (select * from tb where 课程号 in('A','B'))t
    group by 名字
    having count(课程号)=2
    /*测试结果名字
    ----------
    吴娟(1 行受影响)
    */