我正在努力制定正确的 sql 查询来访问存储在我的列之一中的对象的属性并将其用作函数的输入:
- 我有一个“搜索”表
- 在“搜索”中,有一列名为“坐标”并存储 POINT-Objects
- 我定义了一个函数“test”,它获取双输入参数并仅将输入参数返回为双
我想进行如下查询
SELECT test('coord.X') as res FROM `search` ORDER BY res
预期结果:名为“res”的列中列出的 coord.X 值,按从最低到最高的顺序排列。
我得到的每个条目都是“0”(坐标 X/Y 值当然设置为任意值)。
如果我留下的 coord.X 周围没有“'”,则查询会失败并出现错误
#1054 - Unknown column 'coord.X' in 'field list'
我搜索了很多,但找不到任何页面告诉我如何访问 sql-objects 的属性。非常感谢任何帮助。
最佳答案
考虑不带测试函数的示例查询。
SELECT coord.X as res FROM `search` ORDER BY res
Sql 将 coord.X
视为列名,并在 search
中查找该列。由于 X 是 coord 的属性,而不是列名的一部分,因此这就是导致错误的原因。
使用
SELECT test(X(coord)) as res FROM `search` ORDER BY res
应该产生正确的结果。正如调用测试函数的语法是 test()
一样,调用 X 函数(在空间扩展中定义)的语法是 X()
。但是,此函数不适用于未显式声明为 Point 类型的列,因为 sql 将不知道如何解析该值并返回指定的信息。
本质上,X()
与许多其他 mysql 函数类似,例如 ISNULL()
或 SUM()
。正如 SUM()
期望 int 数据类型作为输入一样,X()
期望 Point 数据类型。
关于mysql - SQL - 使用对象属性作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867983/