[SQL ] Nest Query 精進的方法 (空間查詢)

看板Database作者 (小黑炭)時間7年前 (2017/07/05 01:34), 7年前編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
資料庫名稱: MSSQL 資料庫版本: 2012 內容/問題描述: Table A: Columns: geom, type ====================== Table B, field_A, field_B Columns: geom ====================== 目前有兩個表格, 一個是 A, 一個B 我要從A這邊做完第一次篩選之後, 再到B把跟A有交集到的都挑出來 目前我的作法是這樣 WITH points as ( SELECT geom FROM A WHERE type = 'some-type' ) SELECT * FROM B WHERE points.geom.STContains(B.geom) = 1; GROUP BY B.field_A B.field_B ORDER BY B.field_B 這樣的成果會有很多重複資料, 所以不得不用 Group by. 想請問有沒有更好的作法 stored procedure 也可以 我嘗試過把 WHERE 改成 JOIN, 但速度上好像沒什麼差異 有其他關鍵字可以提供嗎 感激 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.253.206.44 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1499189689.A.2F3.html ※ 編輯: love112302 (111.253.206.44), 07/05/2017 01:36:31 ※ 編輯: love112302 (111.253.206.44), 07/05/2017 01:37:42

07/05 10:24, , 1F
A加distinct,B去掉group by?
07/05 10:24, 1F
Hello, 謝謝您的回覆 如果 B 不加上 group by 會多出很多重複的資料 因為一個 A_row_1 可能包含 B1, B2, B3 但 A_row_2 又可能 再次包含 B1, B2, B3 所以會重複兩次 B1, B2, B3 因為這樣才加上 group by 想請問有辦法避免嗎 ※ 編輯: love112302 (111.253.206.44), 07/05/2017 22:23:44

07/06 10:11, , 2F
我不懂預存程序 但不知道能不能在裡面做到比如A row1已
07/06 10:11, 2F

07/06 10:12, , 3F
包含B1/B2/B3了 之後Arow2就跳過B1/B2/B3..
07/06 10:12, 3F
恩 我也是希望有這個方法XD 但我知道為什麼會這麼慢了 MSSQL 在做空間查詢 尤其是 STBuffer 的時候超級慢 改用 STDistance < bufferDistance 就超級快 (攤手 ※ 編輯: love112302 (36.235.11.186), 07/06/2017 21:57:26

11/16 18:57, , 4F
SELECT * FROM B WHERE geom IN
11/16 18:57, 4F

11/16 18:57, , 5F
(SELECT geom FROM A WHERE type = 'some-type')
11/16 18:57, 5F

11/16 18:58, , 6F
不知道有沒有會錯意
11/16 18:58, 6F
文章代碼(AID): #1PMz6vBp (Database)