select * from tb t where 课程号 in('A','B') and exists( select 1 from tb where 名字=t.名字 and 课程号 in('A','B') and 课程号<>t.课程号)
/*------------------------------------------------------------------ -- 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 行受影响) */
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 行受影响)*/
假设在XX表中,select distinct c1.名字 from XX.c1,xx.c2 where c1.课程号=c2.课程号 and c1.课程号='A' and c2.课程号='B' 方法就是 对于相同的表可定义不同的别名,以使它们作为不同的表使用
如果只有A、B两门课程的话,就更好办了 select 名字 from tb group by 名字 having count(课程号)=2
--------------------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 行受影响) */
where 课程号 in('A','B')
and exists(
select 1 from tb
where 名字=t.名字 and 课程号 in('A','B')
and 课程号<>t.课程号)
/*------------------------------------------------------------------
-- 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 行受影响)
*/
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 行受影响)*/
from XX.c1,xx.c2
where c1.课程号=c2.课程号 and c1.课程号='A' and c2.课程号='B'
方法就是 对于相同的表可定义不同的别名,以使它们作为不同的表使用
select 名字 from tb group by 名字 having count(课程号)=2
---------------------------------------------------------------
-- 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 行受影响)
*/