如果许多点在作为多点的字段中存储为几何,那么如何选择(和转换)所有点?
但没有过程,while或循环,因为它们太慢,而且没有字符串转换。
例如:在#1表
中MULTIPOINT(48 16,49 16,50 16)
我想达到如下结果:
id | point
1 | POINT(48 16)
2 | POINT(49 16)
3 | POINT(50 16)
答案 0 :(得分:0)
唯一的"技巧"这里生成一系列自然数。为此 - 您最好的选择是创建一个numbers
表,只需保存 1 中的数字。您认为每个MultiPoint可能存在的最大点数:
CREATE TABLE `numbers` (
id int,
PRIMARY KEY (`id`)
);
INSERT INTO `numbers` VALUES (1),(2),(3),(4),(5); /* ... as many as needed */
现在我们已经解决了这个问题,您可以使用以下查询将MultiPoint分解为点:
SELECT `numbers`.`id`, AsText(GeometryN(`geometryFieldName`, `numbers`.`id`))
FROM `geometryTableName`
INNER JOIN `numbers` ON
(`numbers`.`id` <= NumGeometries(`geometryFieldName`))