SQL語法的篩選 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位
現有一個我思考很久想不出的語法, 還請各位給予賜教 有一個資料庫檔, 內有兩支table, 分別是 TableA, TableB TableA 欄位有 no1, name TableB 欄位有 no1, no2, counts 示範的資料表內容為 TableA no1 name 001 小王 002 小明 003 小張 TableB no1 no2 count 001 A 5 001 B 8 001 C 10 002 A 3 002 B 3 002 C 7 003 A 10 003 B 2 003 C 4 我想取出 TableB 中 凡是 A>=5, B<=3 屬於 TalbeA 的記錄 在TalbeB中符合 A>=5 的只有 no1 的 001 及 003 符合 B<=3的有 002 及 003 兩組 取其交集, 應該取出的是 TableA 中的 003 記錄 我嘗試很多寫法都做不到, 例如 select * from TableA a, TableB b where a.NO1=b.NO1 and ( (b.NO2='A' and b.COUNTS>=5) and (b.NO2='B' and b.COUNTS<=3) ) 結果是空記錄, 這個語法取到空是當然的, 因為不可能一筆RECORD='A' 又='B' 但如果我把 and 改 or, 取出來的是3筆, 分別是 001, 002, 003 (b.NO2='A' and b.COUNTS>=5) or (b.NO2='B' and b.COUNTS<=3) 所以想請教各位前輩, 不知道有沒有可能用一段SQL就能達成這個結果 謝謝! 編輯記錄
P.D. 重新編輯於 2016-12-01 12:17:48, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
Ray_Lin
一般會員 發表:0 回覆:30 積分:11 註冊:2015-07-21 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
不知道使用 join 與 in 的優缺點在那裡? 我很少使用這兩種, 可否討教一二?
將二段語法分別下去測試我的真實記錄 TableA 有 41000筆記錄, TableB 有220000筆記錄 Sryang兄的語法挑出二筆, 與我的語法速度幾乎一樣, 答案一致 Ray_Lin兄的語法, 可能當中下 or 不對, 找出了72筆, 但如果改為 and 則空記錄 不過我要的功能, 除要要篩選外, 還是拉出 a, b, c 的欄位 我的 select a.NO1, a.xxxx, a.xxxx, b.COUNTS as COUNTb, c.COUNTS as COUNTc from D2001 a, D2002 b, D2002 c where (a.NO1=b.NO1 and b.NO2='A' and b.COUNTS >=5) and (a.NO1=b.NO1 and b.NO2='B' and b.COUNTS <=3) Sryung 的 select a.NO1, a.xxxx, a.xxxx, b.COUNTS as COUNTb , c.COUNTS as COUNTc from D2001 a inner join D2002 b on a.NO1=b.NO1 inner join D2002 c on a.NO1=c.NO1 where (b.NO2='A' and b.COUNTS >=5) and (c.NO2='B' and b.COUNTS <=3) 如果 Ray_lin 的語法前面下這樣則會報錯 select a.NO1, a.xxxx, a.xxxx, b.COUNTS as COUNTb , c.COUNTS as COUNTc from .... |
Ray_Lin
一般會員 發表:0 回覆:30 積分:11 註冊:2015-07-21 發送簡訊給我 |
如果要取得其他欄位應該如下
SELECT A.NO1,A.NAME,C.NO1 AS BNO,C,NO2,C.COUNT FROM TABLEA A LEFT JOIN TABLEB C ON C.NO1=A.NO1 WHERE A.NO IN (SELECT B.NO1 FROM TABLEB B WHERE (B.NO2='A' AND B.COUNTS>=5) OR (B.NO2='B' AND B.COUNTS<=3) 我不確定是否有誤會PD的意思,不過可以從我組的SQL結果的明細看對不對 |
it1506
初階會員 發表:33 回覆:89 積分:49 註冊:2011-02-16 發送簡訊給我 |
===================引 用 P.D. 文 章=================== select * from TableA a, TableB b where a.NO1=b.NO1 and ( (b.NO2='A' and b.COUNTS>=5) and (b.NO2='B' and b.COUNTS<=3) ) ===================引 用 P.D. 文 章===================e 這裡的條件要改一下吧 , b.no2 in ('A','B') and b.counts between 3 and 5
編輯記錄
it1506 重新編輯於 2017-09-14 14:31:11, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |