急用!!!如何提取出与表B不同的表A的记录

RICHEER COCA 2014-03-10 07:49:28
现有表tbA和tbB,字段一样,记录数不一样,比较字段notext的记录,提取出与表B不同的表A的notext记录

举例,表tbA
notext	blu
01 04 19 22 24 25 01
15 18 23 27 32 33 15
03 04 07 17 21 27 03
08 10 12 14 18 28 08
05 14 16 21 29 30 05
08 09 19 20 25 32 08
05 07 08 20 31 33 05
09 10 13 14 21 32 09
01 08 11 19 21 24 01
05 09 13 15 17 21 05
04 09 19 22 25 29 04
02 11 19 30 32 33 02
02 03 07 13 21 24 02
04 06 07 14 25 26 04
13 17 18 21 30 33 13
02 10 15 19 20 21 02
09 14 17 23 24 25 09
08 10 15 17 22 29 08
04 06 07 10 21 26 04


表tbB
notext	blu
08 10 12 14 18 28 08
05 14 16 21 29 30 05
08 09 19 20 25 32 08
05 07 08 20 31 33 05
09 10 13 14 21 32 09
01 08 11 19 21 24 01
05 09 13 15 17 21 05
04 09 19 22 25 29 04
02 11 19 30 32 33 02
02 03 07 13 21 24 02
04 06 07 14 25 26 04
13 17 18 21 30 33 13
02 10 15 19 20 21 02
09 14 17 23 24 25 09
08 10 15 17 22 29 08
04 06 07 10 21 26 04
07 09 13 17 21 22 07
08 10 16 20 23 30 08
01 05 10 14 16 30 01


提取出与表B不同的表A的记录,执行了一下语句
select * from tbB union select * from tbA limit cnt

错误
引用
消息 102,级别 15,状态 1,第 1 行
'cnt' 附近有语法错误。


请教大神帮助纠正及指教,谢谢。

我要的结果应该是
notext
01 04 19 22 24 25
15 18 23 27 32 33
03 04 07 17 21 27
...全文
131 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
2005开始建议使用except
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
引用 楼主 u011709039 的回复:
现有表tbA和tbB,字段一样,记录数不一样,比较字段notext的记录,提取出与表B不同的表A的notext记录 举例,表tbA
notext	blu
01 04 19 22 24 25	01
15 18 23 27 32 33	15
03 04 07 17 21 27	03
08 10 12 14 18 28	08
05 14 16 21 29 30	05
08 09 19 20 25 32	08
05 07 08 20 31 33	05
09 10 13 14 21 32	09
01 08 11 19 21 24	01
05 09 13 15 17 21	05
04 09 19 22 25 29	04
02 11 19 30 32 33	02
02 03 07 13 21 24	02
04 06 07 14 25 26	04
13 17 18 21 30 33	13
02 10 15 19 20 21	02
09 14 17 23 24 25	09
08 10 15 17 22 29	08
04 06 07 10 21 26	04
表tbB
notext	blu
08 10 12 14 18 28	08
05 14 16 21 29 30	05
08 09 19 20 25 32	08
05 07 08 20 31 33	05
09 10 13 14 21 32	09
01 08 11 19 21 24	01
05 09 13 15 17 21	05
04 09 19 22 25 29	04
02 11 19 30 32 33	02
02 03 07 13 21 24	02
04 06 07 14 25 26	04
13 17 18 21 30 33	13
02 10 15 19 20 21	02
09 14 17 23 24 25	09
08 10 15 17 22 29	08
04 06 07 10 21 26	04
07 09 13 17 21 22	07
08 10 16 20 23 30	08
01 05 10 14 16 30	01
提取出与表B不同的表A的记录,执行了一下语句 select * from tbB union select * from tbA limit cnt 错误
引用
消息 102,级别 15,状态 1,第 1 行 'cnt' 附近有语法错误。
请教大神帮助纠正及指教,谢谢。 我要的结果应该是
notext
01 04 19 22 24 25
15 18 23 27 32 33
03 04 07 17 21 27
limit这个是2012的T-SQL写法或者mysql语法
乔不思 2014-03-10
  • 打赏
  • 举报
回复
我是新人,
--小F-- 2014-03-10
  • 打赏
  • 举报
回复
select * from tba as a where not exists(select 1 from tb b where notext=a.notext)
直面人生 2014-03-10
  • 打赏
  • 举报
回复
select * from tbA where a.notext not in (select notext from tbB)
lzw_0736 2014-03-10
  • 打赏
  • 举报
回复
select * from tbA except select * from tbB
Yole 2014-03-10
  • 打赏
  • 举报
回复

select * from tbA where  a.notext not in (select notext from tbB)

RICHEER COCA 2014-03-10
  • 打赏
  • 举报
回复
急用啊,waiting for yours...
RICHEER COCA 2014-03-10
  • 打赏
  • 举报
回复
引用 2 楼 u010192842 的回复:

select * from tbA where  a.notext not in (select notext from tbB)

可以修改为
select * from tbA where  notext not in (select notext from tbB)
结果
引用
notext blu 01 04 19 22 24 25 01 15 18 23 27 32 33 15 03 04 07 17 21 27 03
再次谢谢楼上的朋友,学习了。
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
或者:
select * from tbA  where   notext not in (select notext from tbB)
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
select * from tbA a where a.notext not in (select notext from tbB)
引用 9 楼 u011709039 的回复:
[quote=引用 2 楼 u010192842 的回复:]

select * from tbA where  a.notext not in (select notext from tbB)

结果
引用
消息 4104,级别 16,状态 1,第 1 行 无法绑定由多个部分组成的标识符 "a.notext"。
谢谢3楼和5楼,大神级[/quote]
RICHEER COCA 2014-03-10
  • 打赏
  • 举报
回复
引用 2 楼 u010192842 的回复:

select * from tbA where  a.notext not in (select notext from tbB)

结果
引用
消息 4104,级别 16,状态 1,第 1 行 无法绑定由多个部分组成的标识符 "a.notext"。
谢谢3楼和5楼,大神级
EXCEL里使用SQL的方法(欢乐小爪原创) 急用EXCEL的SQL用法,抄来欢乐小爪几篇文章,支持原创,留下小爪印:http://hi.baidu.com/huanhuanxiaozhua/blog EXCEL(VBA)~SQL 经典写法范本汇集(一) 2007-12-10 21:20 编前话:为了更系统的学习sql语句,小爪首次系统的汇集sql 需引用 microsoft activeX Data Objects 2.8 library 1.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K1916]where (大样代码='" & DYDH & "') and (内外框='WKXC')" 2.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K" & CSMaxrow & "] where (大样代码='" & DYDH & "') and (内外框='WKXC')" **************************************************************** A、根据本工作簿的1个查询求和写法范本 Sub 查询方法一() Set CONN = CreateObject("ADODB.Connection") CONN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ----------------- Sub 查询方法二() Set CONN = CreateObject("ADODB.Connection") CONN.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ************************************************************************************************** B、根据本工作簿2个不同类别查询求和写法范本 Sub 根据入库和回款的区域名和月份分别求存货类发货数量和本月回款数量查询() Set conn = CreateObject("adodb.connection") conn.Open "provider=microsoft.jet.oledb.4.0;" & _ "extended properties=excel 8.0;data source=" & ThisWorkbook.FullName Sheet3.Activate Sql = " select a.存货类,a.fh ,b.hk from (select 存货类,sum(本月发货数量) " _ & " as fh from [入库$] where 存货类 is not null and 区域='" & [b2] _ & "' and month(日期)=" & [d2] & " group by 存货类) as a" _ & " left join (select 存货类,sum(数量) as hk from [回款$] where 存货类" _ & " is not null and 区域='" & [b2] & "' and month(开票日期)=" & [d2] & "" _ & " group by 存货类) as b on a.存货类=b.存货类" Range("a5").CopyFromRecordset conn.Execute(Sql) End Sub ******************************************************************* C、根据本文件夹下其他工作簿1个区域的区域求和 Sub 在工作1汇总本文件夹下001工作薄的1分数列查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$]" Sheets(1).[a2].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub --------------------- Sub 在工作1汇总本文件夹下001工作薄的1A1:A10查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(f1) from [sheet1$a1:a10]" Sheets(1).[A5].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub ----------------------- Sub 在工作1汇总本文件夹下001工作薄的1分数列A1:A7查询并msgbox达汇总() Set conn = CreateObject("ADODB.Connection") Set rr = CreateObject("ADODB.recordset") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$a1:a7]" Sheets(1).[A8].CopyFromRecordset conn.Execute(sql) rr.Open sql, conn, 3, 1, 1 MsgBox rr.fields(0) conn.Close: Set conn = Nothing End Sub ****************************************************************************************** D、根据本文件夹下其他工作簿多个区域的单列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第4列 30行查询求和 Dim cn As Object, f$, arr&(1 To 30), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("d5").CopyFromRecordset cn.Execute("select f4 from [基1$a5:d65536]") cn.Close For i = 1 To 30 arr(i) = arr(i) + Range("d" & i + 4) Next i End If f = Dir Loop Range("d5").Resize(UBound(arr), 1) = WorksheetFunction.Transpose(arr) Application.ScreenUpdating = True End Sub ************************************************************************************************** E、根据本文件夹下其他工作簿多个区域的多列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第B\C\D列 25行查询求和 Dim cn As Object, f$, arr&(1 To 25, 1 To 3), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("b6").CopyFromRecordset cn.Execute("select f2,f3,f4 from [基3$a6:e65536]") cn.Close For i = 1 To 25 For j = 1 To 3 arr(i, j) = arr(i, j) + Cells(i + 5, j + 1) Next j Next i End If f = Dir Loop Range("b6").Resize(UBound(arr), 3) = arr Application.ScreenUpdating = True End Sub *********************************************************************************** F、其他相关知识整理 ' 用excel SQL方法 'conn是建立的连接对象,用open打开 ' 通过 CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn ' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象 '设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。 -------------- ' conn.Close示关闭conn连接 ' Set conn = Nothing 是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭 conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"能把这段含义具体解释一下吗? '这里的dbq的作用? '------------------ 'dsn是缩写,data source name数据库名 是 excel file ' 'dbq 也是缩写,data base query 意思是数据库查询,后接源库文件名 001.xls '--------------------- '代码中长单词怎么记住的? '比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是“复制、从、记录集” '----------------- 'Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用? ' 'SQL一般结构是select 字段 from ,意思是从指定的中查询字段,字段的理解可以是: 中的列名 ' '分数 是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据 '------------------- '为什么要用复制的对象引用过来计算呢? ' '因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总来,所以需要复制copy ' '注意 这里的 [sheet1$]" ,001文件的数据存放地上sheet1,应当用方括号并加上$ ' '如果源数据文件001不是excel,而是Access,则引用时,不需要加方括号,也不要$ '----------------- 还有,这里Execute示什么作用? '' Execute是执行SQL查询语句的意思 ----------------------------- 如果不要字段也可以,那么在打开语句中加上:hdr=no '这样没有分数字段也可实现 'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1示第一列数据 '[sheet1$a1:a10] "是只求a1:a10区域的和" ********************************************** 编后话: 前面也多次听说了sql,总没有时间,也没有好好认识它 第一次认真系统学习sql语句,汇集了一些代码。 有不同理解的人,欢迎给予小爪评论,小爪只爱excel

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧