作者love112302 (小黑炭)
看板Database
标题[SQL ] Nest Query 精进的方法 (空间查询)
时间Wed Jul 5 01:34:46 2017
资料库名称: 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://webptt.com/cn.aspx?n=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
1F:→ 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
2F:→ flowwinds: 我不懂预存程序 但不知道能不能在里面做到比如A row1已 07/06 10:11
3F:→ 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
4F:推 jackiechin: SELECT * FROM B WHERE geom IN 11/16 18:57
5F:→ jackiechin: (SELECT geom FROM A WHERE type = 'some-type') 11/16 18:57
6F:→ jackiechin: 不知道有没有会错意 11/16 18:58