当前位置: 首页 > 面试题库 >

棘手的SQL与Sql Geometry字段不同

陶锋
2023-03-14
问题内容

我有一个与该Sql Geometry类型不兼容的sql语句,因此我正在尝试对其进行改版以使其正常工作。

它的基本要旨是这样的:

Select distinct A,B,C,D,SHAPE FROM TABLE1 UNION SELECT A,B,C,D,SHAPE FROM TABLE2

因此,将两个不同(但相似)表上的复杂不同语句的结果合并在一起。

问题在于SQL Geometry类型(SHAPE字段)不能包含在不同的语句中,因为它不是可比较的类型。

我可以SHAPE从参加联合的两个子查询中删除该字段。但是我想在解析完这些子查询后找回它。SHAPE如果我知道A列的值,则可以获取该字段。

所以我的问题是 :如何从两个子查询中的不同语句中删除字段,然后通过将其加入另一列(A)将其返回到结果集中(与其余字段一起)?


问题答案:

您可以强制转换为VARBINARY(MAX),然后重新强制转换。

create table tbl1 ( ID int, a int, b char(3), d geometry );
create table tbl2 ( ID int, a int, b char(3), d geometry, other float );
insert tbl1 (ID, a, b, d) values
    (1, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)),
    (2, 3, 3, geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)),
    (3, 4, 3, geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)),
    (4, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 250 0, 150 150, 0 150, 0 0))', 0)),
    (5, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 350 0, 150 150, 0 150, 0 0))', 0))
insert tbl2 (ID, a, b, d) values
    (6, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)), -- same as tbl1.ID=1
    (7, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 950 0, 150 150, 0 150, 0 0))', 0)),
    (8, 2, 3, geometry::STGeomFromText('POLYGON ((0 0, 350 0, 150 150, 0 150, 0 0))', 0)); -- same as tbl1.ID=5

SELECT A, B, cast(c as geometry) c
FROM
(
    Select A,B,cast(D as varbinary(max)) c FROM tbl1
    UNION
    SELECT A,B,cast(D as varbinary(max)) FROM tbl2
) X;


 类似资料:
  • 问题内容: 有一段时间遇到这个麻烦。 我有这样的数据库: 我要执行搜索,找到最便宜的汽车,然后按价格升序订购其余相同品牌的汽车。 我希望我的输出是这样的: 最便宜的汽车是福特嘉年华(Forest Fiesta),因此,其余福特车型都按照价格直接订购。然后,本田拥有第二便宜的车型,因此爵士车和其他本田车紧随其后,依此类推。 这可能吗? 问题答案: 您需要做的是创建一个瞬态数据集,该数据集包含car_

  • Netty中是否有任何嵌入式优先级机制可以帮助我决定哪些消息比其他消息发送得更频繁?

  • 下面的代码仅在观察2完成后才从观察1发出项。 我需要实现另一种行为 第二个可观测对象仅发射项目,而第一个可观测对象为空,然后发射第一个可观测对象的项目。 我无法找到只使用基本运算符的正确解决方案,自定义运算符startWithDefault的正确RxJava 2实现应该是什么样子? 附笔。 由于种族原因,在可观察到立即发射的情况下,这不是正确的解决方案1

  • 有一段时间想弄明白,但运气不好。我有以下表格(MS-SQL 2008):学生ID–电子邮件–档案ID 课程 courseID–名称 学生资源 学生ID–课程ID 配置文件 课程设置 学生学习日志 logID-studentID-courseID-accessDate 每个学生在注册时,都会被分配一个个人资料。对于每个配置文件都有一些必修课程。这些必修课程以及用户参加的任何其他课程都保存在学生课程表

  • 我是一个初学者,这是我正在编写的代码的一部分(简化版): 哪里出了问题?请帮忙...非常感谢您抽出时间!

  • Auto-increment 会在新记录插入表中时生成一个唯一的数字。 AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值。 我们可以在表中创建一个 auto-increment 字段。 用于 MySQL 的语法 下面的 SQL 语句把 "Persons" 表中的 "ID" 列定义为 auto-increment 主键字段:CREATE TABLE Pers