Mysql 弧度函数内的查询不起作用。为什么?
Mysql query inside radians function not working. Why?
这个有效:
SELECT
(
radians(
44.43763930
)
)
这不是:
SELECT
(
radians(
SELECT
latitude
FROM
coords
WHERE
coord_id = '1234'
)
)
我不明白。问题出在哪里?
我尝试将查询结果转换为十进制,但还是不行。
假设子查询执行 return 一行(而不是更多),这有效:
SELECT radians( (SELECT latitude FROM coords WHERE coord_id = 1234) )
关键是子查询需要用括号括起来,这样数据库就可以理解为标量子查询——即return一列最多一行的查询。
请注意,另一方面,括号 around radians()
在两个查询中都是不必要的。
如果子查询 return 超过一行,则查询在运行时失败。在这种情况下,您可能想要切换到更传统的措辞:
SELECT radians(latitude) FROM coords WHERE coord_id = 1234
请注意,我删除了 coord_id
的文字值周围的单引号;它看起来像一个数字,所以它应该被这样对待(如果该列是类似字符串的数据类型,您可以恢复该更改)。
子查询需要额外的括号。但是,更自然的做法是将函数调用 移动到 子查询中:
SELECT (SELECT RADIANS(latitude)
FROM coords
WHERE coord_id = '1234'
)
当然,您根本不清楚为什么要在此处使用子查询,但那是另一回事。
这个有效:
SELECT
(
radians(
44.43763930
)
)
这不是:
SELECT
(
radians(
SELECT
latitude
FROM
coords
WHERE
coord_id = '1234'
)
)
我不明白。问题出在哪里?
我尝试将查询结果转换为十进制,但还是不行。
假设子查询执行 return 一行(而不是更多),这有效:
SELECT radians( (SELECT latitude FROM coords WHERE coord_id = 1234) )
关键是子查询需要用括号括起来,这样数据库就可以理解为标量子查询——即return一列最多一行的查询。
请注意,另一方面,括号 around radians()
在两个查询中都是不必要的。
如果子查询 return 超过一行,则查询在运行时失败。在这种情况下,您可能想要切换到更传统的措辞:
SELECT radians(latitude) FROM coords WHERE coord_id = 1234
请注意,我删除了 coord_id
的文字值周围的单引号;它看起来像一个数字,所以它应该被这样对待(如果该列是类似字符串的数据类型,您可以恢复该更改)。
子查询需要额外的括号。但是,更自然的做法是将函数调用 移动到 子查询中:
SELECT (SELECT RADIANS(latitude)
FROM coords
WHERE coord_id = '1234'
)
当然,您根本不清楚为什么要在此处使用子查询,但那是另一回事。