看板 Database 關於我們 聯絡資訊
資料庫名稱: 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
smlboby: A加distinct,B去掉group by? 07/05 10:24
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
flowwinds: 我不懂預存程序 但不知道能不能在裡面做到比如A row1已 07/06 10:11
flowwinds: 包含B1/B2/B3了 之後Arow2就跳過B1/B2/B3.. 07/06 10:12
恩 我也是希望有這個方法XD 但我知道為什麼會這麼慢了 MSSQL 在做空間查詢 尤其是 STBuffer 的時候超級慢 改用 STDistance < bufferDistance 就超級快 (攤手 ※ 編輯: love112302 (36.235.11.186), 07/06/2017 21:57:26
jackiechin: SELECT * FROM B WHERE geom IN 11/16 18:57
jackiechin: (SELECT geom FROM A WHERE type = 'some-type') 11/16 18:57
jackiechin: 不知道有沒有會錯意 11/16 18:58