SQL 查詢選修了具體兩門課的學生 謝謝各位


問題是:查詢 一個人   他選修了A課程 又選修了 B課程




名字 課程號
吳娟 A
吳娟 B
小明 A
小王 B


怎么用SQL找出這個人。。 

11 个解决方案

#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)

------------------------------------------------------------------*/
--> 生成測試數據表:tb

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'
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'
GO

SELECT * 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


<> 是什么意思?

#5


引用 4 樓 a341869094 的回復:
<> 是什么意思?

不等於的意思, 等價於  !=

#6


引用 4 樓 a341869094 的回復:
<> 是什么意思?
不等於

#7


假設在XX表中,

select distinct c1.名字 
from XX.c1,xx.c2
where c1.課程號=c2.課程號 and c1.課程號='A' and c2.課程號='B'


方法就是   對於相同的表可定義不同的別名,以使它們作為不同的表使用

#8


如果只有A、B兩門課程的話,就更好辦了
select 名字 from tb group by 名字 having count(課程號)=2

#9


引用 8 樓 happycell188 的回復:
如果只有A、B兩門課程的話,就更好辦了

SQL code
select 名字 from tb group by 名字 having count(課程號)=2
贊同。。。

#10


--------------------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 行受影響)
*/

#11


謝謝各位 研究中

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com