Mysql 函数(选择x,y…)不';行不通
使用MySQL,我试图使查询不那么冗长。而不是Mysql 函数(选择x,y…)不';行不通,mysql,sql,Mysql,Sql,使用MySQL,我试图使查询不那么冗长。而不是 UPDATE tbl SET col = Point( If( condition, long CASE WHEN THEN ELSE END, a different long CASE WHEN THEN ELSE END ), If( condition, long CASE WHEN THEN ELSE END, a di
UPDATE tbl SET col = Point(
If(
condition,
long CASE WHEN THEN ELSE END,
a different long CASE WHEN THEN ELSE END
),
If(
condition,
long CASE WHEN THEN ELSE END,
a different long CASE WHEN THEN ELSE END
)
)
我尝试了以下方法,但失败了
UPDATE tbl SET col = Point(
SELECT If(condition, x, different(x)), If(condition, y, different(y))
FROM (
SELECT long CASE WHEN THEN ELSE END x, long CASE WHEN THEN ELSE END y
FROM tbl
) foo
)
不能使用SELECT语句替换函数的参数吗?或者,我只是在做傻事?或者,当ELSE END只出现一次时,是否有其他方法可以使此长格?使用类似以下内容:
UPDATE tbl AS m_tbl
SET col = (
SELECT Point( IF(.., x1, x2),
IF (.., y1, y2)
)
FROM (
SELECT .. AS x1,
.. AS x2,
.. AS y1,
.. AS y2
FROM tbl
WHERE m_tbl.pk_col = tbl.pk_col
)
)
您可以尝试按照
UPDATE tbl
INNER JOIN (
SELECT
tblKey,
long CASE WHEN THEN ELSE END x,
long CASE WHEN THEN ELSE END y
FROM tbl
) s ON tbl.tblKey = s.tblKey
SET tbl.col = Point(
IF(condition, s.x, different(s.x)),
IF(condition, s.y, different(s.y))
)
我不会把你正在做的任何事情称为“愚蠢”,但我怀疑MySQL不会让你使用两列输出,使两列都成为同一函数的参数,就像你试图使用它们的方式一样。事实上,此上下文中的子查询最有可能返回标量结果,这意味着结果集的值不超过一个(即一列乘以一行)。您可能需要详细说明您为我或其他人所做的工作,以便能够为您的问题找到一种解决方法(或一个有用的提示)。上述方法可能有效,但子查询返回所有行,UPDATE要求每行一行。我尝试在更新查询中向tbl
添加别名,并使用别名使用PK约束子查询,但没有成功。