環境是VB6 用的ACCESS資料庫
有3張表
表名 CPFileList
cpFileNo cpState
f1 A
f2 A
f3 B
f4 B
f5 C
f6 C
表名 CPOutList1
cpOutNo cpClient
d1 客戶1
d2 客戶2
d3 客戶3
表名 CPOutList2
cpOutNo cpFileNo
d1 f1
d1 f2
d2 f3
d2 f4
d3 F5
d3 f6
怎么樣用SQL 按給定的cpState值和cpClient值 找出對應的cpOutNo記錄
我現在使用的是這樣的查詢
SELECT cpOutNo FROM CPOutList1 WHERE cpClient='客戶1' AND cpOutNo IN (SELECT cpOutNo FROM CPOutList2 WHERE cpFileNo IN (SELECT cpFileNo FROM CPFileList WHERE cpState='A'))
因為我是新手,對SQL的用法還不是很懂
不知道這樣用IN的方法查詢是不是合理,是不是比較常規的用法
想了解一下,大家在這種多表中是怎么查的。
哪種方式比較常用,查詢起來速度快,效率高。
uj5u.com熱心網友回復:
如果少量資料,用in沒有問題,如果資料量達到一定的級別,比如1W以上,最好別用in具體的代碼不寫了,你可以看看 inner join ,在查詢分析器的sql幫助里有.
uj5u.com熱心網友回復:
SELECT CPOutList1.cpOutNo As Final_OutNo, CPFileList.cpFileNo, CPOutList2.cpOutNo, CPFileList2.cpFileNo FROM CPOutList, CPOutList1, CPOutList2 WHERE CPOutList1.cpOutNo = CPOutList2.cpOutNo And CPFileList.cpFileNo = CPFileList2.cpFileNo And cpClient='客戶1' AND cpState='A'uj5u.com熱心網友回復:
你好 of123想問一下
SELECT a.*,a.* FROM a INNER JOIN b ON a.a1=a.a1
SELECT a.*,a.* FROM WHERE a.a1=b.b1
這2種查詢方式,有什么不同啊,用 INNER JOIN 和 WHERE條件,哪個比較快呢
uj5u.com熱心網友回復:
http://download.csdn.net/detail/veron_04/1644211uj5u.com熱心網友回復:
http://download.csdn.net/detail/veron_04/1644211這里沒找到到有關SQL的內容啊
uj5u.com熱心網友回復:
說實話,我不知道。我一直假設它們在 Jet Engine 平臺是同樣執行的。也許與資料庫引擎的具體實作有關。
uj5u.com熱心網友回復:
現在又發現新問題我用2種 INNER JOIN 和 WHERE條件 都試過了,就是會查找出相同的重復記錄
比如
SELECT * FROM CPOutList1 INNER JOIN(CPOutList2 INNER JOIN CPFileList ON CPFileList.cpFileNo = CPOutList2.cpFileNo ) ON CPOutList2.cpOutNo=CPOutList1.cpOutNo WHERE CPFileList.cpState='A'
這樣查詢出來 ,我想要的應該是
表名 CPOutList1
cpOutNo cpClient
d1 客戶1
中的這d1條記錄
可是實際記錄集里卻是2條相同的
d1 客戶1
d1 客戶1
這不是我想要的,因為我想得到的只是CPOutList1中的記錄,而且不能有重復的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/150640.html
