table A
sid
1
2
3
4
table B
uid sid pass
c55 1 y
eb4 2 n
c55 3 n
08d 3 y
c55 3 n
08d 2 y
结果集应该如下:
uid sid
c55 2
c55 3
c55 4
eb4 1
eb4 2
eb4 3
eb4 4
08d 1
08d 4
SELECT如果有单独的课程表好点
T1.uid,T1.sid
FROM
(SELECT * FROM A,(SELECT uid FROM B GROUP BY uid)T)T1
LEFT JOIN B T2 ON T1.uid = T2.uid AND T1.sid = T2.sid
WHERE T2.pass IS NULL OR T2.pass='n'
CREATE TABLE #student
(
UId VARCHAR(10)
,NAME NVARCHAR(20)
)
INSERT INTO #student
SELECT 'c55', 'x' UNION ALL
SELECT 'eb4', 'x' UNION ALL
SELECT 'c55', 'x' UNION ALL
SELECT '08d', 'x' UNION ALL
SELECT 'c55', 'x' UNION ALL
SELECT '08d', 'x' UNION ALL
SELECT 'NOT', '没有参加过考试的学生'
CREATE TABLE #passhis
(
UId VARCHAR(10)
,sid INT
,pass CHAR(1)
)
INSERT INTO #passhis
SELECT 'c55', 1, 'y' UNION ALL
SELECT 'eb4', 2, 'n' UNION ALL
SELECT 'c55', 3, 'n' UNION ALL
SELECT '08d', 3, 'y' UNION ALL
SELECT 'c55', 3, 'n' UNION ALL
SELECT '08d', 2, 'y'
CREATE TABLE #course
(
sid VARCHAR(10)
,NAME NVARCHAR(20)
)
INSERT INTO #course
SELECT 1,'y' UNION ALL
SELECT 2,'yu' UNION ALL
SELECT 3,'xx' UNION ALL
SELECT 4,'xx'
SELECT DISTINCT s.UId,c.sid
FROM #student AS S
CROSS JOIN #course AS C
WHERE NOT EXISTS (SELECT 1 FROM #passhis P WHERE S.UId=P.UId AND C.sid=P.sid AND p.pass='y')
--LEFT JOIN #passhis P ON S.UId=P.UId AND C.sid=P.sid --left join /exists 都可以
--WHERE p.pass='n' OR p.pass IS NULL
DROP TABLE #student
DROP TABLE #passhis
DROP TABLE #course
--学生表是必须的,假定是 c
WITH t1 AS ( -- 学生和课程做个全集
SELECT c.uid,
a.sid
FROM c,a
)
,t2 AS ( -- 生成全集的通过状态
SELECT t1.uid,
t1.sid,
ISNULL(b.pass,'n') AS pass
FROM t1
LEFT JOIN b
ON b.uid = t1.uid
AND b.sid = t1.sid
)
-- 输出未通过的学生、课程
SELECT t2.uid,
t2.sid
FROM t2
WHERE pass = 'n'
在介绍update之前先推荐两个备份表的sql。 Select * into table_2 from table_1//table2可以不存在 Insert into table_2(column1,column2) select column1,column2 from table_1 //需要先创建table_2若不存在 ...
SQL Server 三个表及以上的关联查询 三表关联查询 select u.user_id,u.user_name,u.user_sex,c.college_name,s.subject_name,s.achievement from user u LEFT JOIN subject s ON s.user_number=u. user_id LEFT ...
该用户与可信 SQL Server 连接无关联 问题一、忘记了登录Microsoft SQL Server 2005 的sa的登录密码 解决方法:先用windows身份验证的方式登录进去,然后在‘安全性’-‘登录’-右键单击‘sa’-‘属性’,修改密码...
MySQL、SQLServer多表关联更新
SQL基础知识整理: 常见的SQL面试题:经典50题 三、50道面试题 2.汇总统计分组分析 3.复杂查询 sql面试题:topN问题 4.多表查询 【面试题类型总结】这类题目属于行列如何互换,解题思路如下: 其他面试题: ...
在SQL语句中,关于表连接,若按照表的数量来划分,可以划分为单表连接、两表连接和两表以上连接,在本篇文章中,主要讲解两表连接,其他多表连接原理一样。 关于表连接有很多种类,本文主要讲解交叉连接,内连接,...
文章目录准备知识定义外键使用SSMS工具定义外键使用SQL方式定义外键删除外键使用SSMS工具删除外键方式一:在对象资源管理器中删除主键方式二:在表设计器中删除主键使用SQL方式删除外键 准备知识 外键...
SELECT TOP (#{limit}) storeId, intermediaryId, storeAddress, storeName, storePhone, principal, principalPhone, isEnable ... SELECT ROW_NUMBER() OVER (ORDER BY b.intermedi
DELETE [子表] WHERE [关联Id] = @Id DELETE [主表] WHERE [Id] = @Id GO 执行方法:EXECUTE [存储过程] @Id 解决办法: 1、在设计数据库表时,通过设置级联删除操作来完成。 2、可以写触发器完成...
![图片说明]... 图一 表 与 图二 表 圈圈的字段关联  图二表 相同的有重复 只把把图一关联相同的 最大中 其它为空
A表 TYS_XM_RELATION2019 B表 TYS_XMYS2019(部分字段) 目标 :将B表的ysxmh用A表的newysxmh代替。代替条件A表的oidysxmh = B表的ysxmh update B set B.ysxmh = A.newysxmh from A,B where A.oldysxmh = B....
SELECT TOP (#{pages}*#{limit}) * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY b.intermediary_Id) AS RowNumber,* FROM (select * from user_int
在SQL中,经常用到关联查询,比如select a.* from A a inner join B b on a.PId=b.FId where 条件,SQL中也支持类似的关联更新和关联删除。 关联更新语法: update a set a.字段=” from A ...
update a set a.name1 = b.name1, a.name2=b.name2from 表A a, 表B b where a.id=b.id
内连接和外连接的区别主要体现在返回数据上,内连接返回的是符合连接条件和查询条件的记录,外连接返回的数据包含了不符合连接条件没有建立关联的记录。 内连接 A表和B表通过id字段建立连接,返回的是A中id和B...
update a set a.KSMC = b.name from JC_KSXXB a inner join chisdb_ymyy..zd_unit_code b on a.KSDM = b.code 转载于:https://www.cnblogs.com/zhangdongsheng/p/9747829.html
利用SQL Server进行关联分析 前一节介绍了数据仓库的构建,本节介绍如何利用SQL Server数据库进行关联分析,数据仍然采用上次构建数据仓库时所使用的数据,讲述方式仍然采取截图的方式,之前作者已经在word中有所...
UPDATE sys_admin SET sys_admin.fullName=sys_user.fullName FROM sys_user where sys_user.userId=sys_admin.userId and sys_user.createDate >'2018-07-15 16:08:18'
没别的 就是加索引 聚集索引 或者复合非聚集索引 都行 俩个表都需要加 如果不加索引 比如 主表ID是 3 2 1 子表没加索引 ...每一次查询主表 1 的时候会遍历一次全子表 也就是 查...
SQL Server 2019 新特性之 SQL Server大数据群集 介绍(一) 从开始SQL Server 2019 预览,SQL Server 大数据群集允许你部署的 Kubernetes 上运行的 SQL Server、 Spark 和 HDFS 容器的可缩放群集。 并行运行这些...
--错误写法: update JFP_DEPT_copy a set a.de_name = (select b.de_name from JFP_DEPT_copy b where b.de_deptcode = a.de_parentcode) + a.de_name ...---正确写法: 要修改的表不能命名别名,可以用...
sql server中查询最大最小值的时候很简单,直接取max(val)、min(val),然后group by 某需要统计的字段就可以统计出来,但是,在实际项目中,很多取最大最小值的操作都需要取出出现最大最小值对应的某列的值。...
delete 表A from [表A] as a inner join [表B] as b ona.ID=b.ID
一:sql server间连接法一:执行系统存储过程 sp_addlinkedserver ,命令如下:创建链接:exec sp_addlinkedserver 'srv_lnk ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_...
SQL语句:select * from student left join course onstudent.ID=course.ID {左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL). 注:此时我们
 A表和B表是一对多关系,要如何写sql语句实现图中的效果。
在不同的sqlserver数据库中,需要进行不同数据库中的表在同一sql语句中进行关联查询,可以事先在服务器上的SqlServer数据库中先执行以下sql语句: (1)exec sp_addlinkedserver @server= 'WLSQL', @srvproduct= ''...
sql SERVER 和.net结合的和很好 绝大多数数据库,都需要数据库服务器才能运行 表间关联,外键 SQL Server数据库中不同数据类型的含义 数据类型 含义 int 每个数值占用 4字节,-2,147,483,648到2,147,...
安装好SQLServer2005(或者装了Visual Studio 2008后自带的SQLServer2005)用SQL Server身份验证的登录的时候有时候会发生这样的情况: Server连接无关联,错误:18452" title="用户登录失败,该用户与可信SQL ...
C#入门必看含有100个例字,每个例子都是针对C#的学习关键知识点设计的,是学习C#必须知道的一些程序例子,分享给大家,需要的可以下载