Re: [SQL ] 從三個資料表取出記錄
建議你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
推
09/05 16:30, , 1F
09/05 16:30, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章