функция (SELECT x, y ...) не работает - PullRequest
3 голосов
/ 05 августа 2011

Используя 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 для замены аргументов функции? Или я просто делаю что-то глупое? Или есть другой способ заставить этот long CASE WHEN THEN ELSE END появиться только один раз?

Ответы [ 2 ]

0 голосов
/ 07 августа 2011

Вы можете попытаться построить свой запрос в соответствии с

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))
)
0 голосов
/ 05 августа 2011

Используйте что-то вроде:

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
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...