線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1289
推到 Plurk!
推到 Facebook!

請教有點複雜的SQL 指令

尚未結案
leee02
一般會員


發表:17
回覆:12
積分:5
註冊:2002-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-03 15:39:15 IP:210.67.xxx.xxx 未訂閱
我有一個TABLE 包含4個欄位(A、B、C、D) 想要將A、B、C 有相同值並且D為NULL 的RECORD 選出來 (如*號所示) (***為所要選取的Record) A B C D ------------------------------ 02 08 0001 02 08 0002 02 08 0003 02 08 0004 02 08 0005 02 08 0006 02 08 0007 02 08 0008 02 08 0009 02 08 0010 02 08 0011 02 08 0012 02 08 0013 *** 02 08 0013 01 * 02 08 0013 02 * 02 08 0014 02 08 0015 02 08 0016 02 08 0017 [b][/b
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-03 15:53:45 IP:211.74.xxx.xxx 未訂閱
SELECT A,B,C,D FROM XX, (SELECT A,B,C,Count(x) as xCount FROM XX WHERE D='' GROUP BY A,B,C) B WHERE B.xCount>1 AND xx.A=B.A AND xx.B=B.B AND xx.C=B.C TRY TRY SEE
alice
初階會員


發表:41
回覆:49
積分:28
註冊:2002-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-03 16:39:37 IP:211.75.xxx.xxx 未訂閱
試試看 SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE A=T.A AND B=T.B AND C=T.C )>1
leee02
一般會員


發表:17
回覆:12
積分:5
註冊:2002-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-03 17:42:13 IP:210.67.xxx.xxx 未訂閱
引言: 試試看 SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE A=T.A AND B=T.B AND C=T.C )>1
我用的資料庫是Paradox 的Database ,上面的語法好像有點問題,不能WORK。
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-03 17:43:46 IP:61.220.xxx.xxx 未訂閱
hi leeeo2 : 從你的table結構及資料內容來看 似乎有些問題ㄝ 從你的資料內容來看 你的key值不管是哪幾個欄位組合 一定有包含D欄位 (因為A、B、C 可以有相同值) 但是KEY值是不可以有NULL的 所以資料應該存不進去 就算SQL語法會過 應該也沒用 所以你要不要再看一下你的table結構< >< > 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
alice
初階會員


發表:41
回覆:49
積分:28
註冊:2002-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-03 18:28:51 IP:211.75.xxx.xxx 未訂閱
引言: --------------------------------------------------------------------- 試試看 SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE A=T.A AND B=T.B AND C=T.C )>1 --------------------------------------------------------------------- 我這可用在Oracle,FireBird的資料庫, 若是Paradox, sorry ,我不知道Paradon的語法!!
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-03 21:06:13 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 試試看 SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE A=T.A AND B=T.B AND C=T.C )>1
針對PARADOX以上語法沒錯 我用的資料庫是Paradox 的Database ,上面的語法好像有點問題,不能WORK。 1.若是你用Desktop來執行Query,指到Table所在目錄要設Alias,然後Query要選取此Alias 2.若是在程式中,可能是Query元件設定有問題
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-04 01:15:33 IP:203.203.xxx.xxx 未訂閱
select count(a b c) f1,a,b,c from table1 where d is not null group by a,b,c 可以列出a,b,c有重複且d不為零的 我推測你主要的目的是要把重複的資料抓出來 試了很久,paradox的sql語法不能select * from (select *...) 可能語法還不夠熟, 待高明者續 發表人 - hahalin 於 2003/04/04 01:19:52
leee02
一般會員


發表:17
回覆:12
積分:5
註冊:2002-10-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-04 10:44:17 IP:210.67.xxx.xxx 未訂閱
引言:
引言:
引言: 試試看 SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE A=T.A AND B=T.B AND C=T.C )>1
針對PARADOX以上語法沒錯 我用的資料庫是Paradox 的Database ,上面的語法好像有點問題,不能WORK。 1.若是你用Desktop來執行Query,指到Table所在目錄要設Alias,然後Query要選取此Alias 2.若是在程式中,可能是Query元件設定有問題
=================================== 我試過上面的語法是OK的,但我的資料庫內有好幾萬筆資料,執行起來要很久。
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-04 11:03:20 IP:211.74.xxx.xxx 未訂閱
SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE D IS NULL AND A=T.A AND B=T.B AND C=T.C )>1 這樣ㄋ???
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-04 12:01:23 IP:211.76.xxx.xxx 未訂閱
PARADOX並不是SQL資料庫,以SQL指令執行效能無達到滿意 可以建PRIMARY KEY A;B;C;D再執行看看 若效能無達到滿意,可能改用1.換資料庫 2.用TTable元件做
leee02
一般會員


發表:17
回覆:12
積分:5
註冊:2002-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-04 12:14:31 IP:210.67.xxx.xxx 未訂閱
引言: PARADOX並不是SQL資料庫,以SQL指令執行效能無達到滿意 可以建PRIMARY KEY A;B;C;D再執行看看 若效能無達到滿意,可能改用1.換資料庫 2.用TTable元件做
========================================================= 關於你的建議: 1.換資料庫可能不可行,因為現行系統開發資料庫已是PARADOX。 2.用TTABLE元件,請教該如何使用呢?
leee02
一般會員


發表:17
回覆:12
積分:5
註冊:2002-10-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-04 12:18:48 IP:210.67.xxx.xxx 未訂閱
引言: SELECT A,B,C,D FROM TEST T WHERE D IS NULL AND (SELECT COUNT(*) FROM TEST WHERE D IS NULL AND A=T.A AND B=T.B AND C=T.C )>1 這樣ㄋ???
============================ 可以執行,但找不到任何資料。 (感謝鼎力相助)
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-04-04 12:47:29 IP:211.76.xxx.xxx 未訂閱
1.你主要訴求是效能,不知道你現在執行一次是多久. 2.至於要用何種方式來改進,需要引用你的資料檔來測試若是方便可以壓縮那個資料檔及其索引檔上傳以供測試為你找出較佳的處理方式
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-04-04 13:27:53 IP:218.16.xxx.xxx 未訂閱
假設 : 1. 若有重覆資料時只得一筆的D是NULL,其他重覆資料的 D 一定不是 NULL 2. 沒重覆資料的 D 一定是 NULL 3. A,B,C,D 是固定長度字串 (若是數字也可以但要稍作更改) 你應可以用 select A,B,C,D from test where A B C in (Select distinct A B C from test where D <> '') and D = ''; 我以你第一個 POST 附上的資料再加上些重覆的資料測試是可行的。 補充: 1. 若文字欄位但不固定長度可用 A "-" B "-" C ("-"可換成ABC欄位一定不會出理的字或附號 2. 若數字欄位可以 (A * 1000000) (B * 10000) C 等等 發表人 - Justmade 於 2003/04/04 13:44:24
系統時間:2024-05-20 11:35:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!