Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 函数(选择x,y…)不';行不通_Mysql_Sql - Fatal编程技术网

Mysql 函数(选择x,y…)不';行不通

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

使用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 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约束子查询,但没有成功。