作者seagal (会长绕跑了)
看板Database
标题Re: [SQL ] 从三个资料表取出记录
时间Tue Sep 5 15:11:34 2006
建议你SQL statement最好都在Access里面完成
也就是不推荐你使用第一种方法
这样你以後要找存取资料的逻辑
会被分散在VB.NET和Access里面
你的需求可以使用not exists(或是not in)就可以了
取出 A.地址 中不存在 B.地址 之记录 => 当作子查询
SELECT C.地址
FROM C
WHERE C.地址 not in(
SELECT A.地址
FROM A LEFT JOIN B ON A.地址 = B.地址
WHERE (((B.地址) Is Null));
)
事实上子查询也可以用not in来做
只是我懒的打了
而且not in的效率应该是比left join来的好(前提是你的地址要有做索引)
不然Access白吃白吃的应该没办法最佳化
※ 引述《Uihc (我 有我的倔强...)》之铭言:
: 资料库名称:ACCESS
: 资料库版本:2003
: 内容/问题描述:
: 使用的语言是VB.NET
: 想请教大家,现在我有三张资料表─在这里简称之为 A、B、C
: 这三张资料表都有地址栏位
: 我想要取出的资料步骤如下:
: 1.取出 A.地址 中不存在 B.地址 之记录 = D
: →也就是B包含於A,想找出A中扣掉B之後的记录有那些
: 这个步骤可以正常取出想要的记录没有问题,我的语法如下:
: (或是有其他更适当的语法?)
: SELECT A.地址
: FROM A LEFT JOIN B ON A.地址 = B.地址
: WHERE (((B.地址) Is Null));
: 2.接着要取出 C.地址 中不存在 D.地址 之记录 = 最终要取得之记录
: →也就是D包含於C,想找出C中扣掉D之後的记录有那些
: 现在不知道该如何下手的就是这个部份,主要是不太熟悉VB.NET的资料库存取方法
: 我的想法有二:
: (1)
: 我用OleDbDataAdapter去连接资料表,接着就产生DataSet1
: 在产生DataSet1之後,要接着下步骤2,一样利用OleDbDataAdapter再去连结C资料表
: 但要和DataSet1加入查询时就不知道该怎麽做下去
: (2)
: 就只用一次OleDbDataAdapter去连结三张资料表,然後把Step1和Step2要做的sql
: 写在一起,但写到前半,step2的部份就不知该怎麽继续了 >"<
: 所以想请各位给我意见或方向~谢谢<(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.169.200
1F:推 Uihc:大感谢!! 果然可以了v( ̄︶ ̄)y 09/05 16:30