Как я могу использовать данные из других столбцов в SQL? - PullRequest
1 голос
/ 04 декабря 2011

Я пытаюсь использовать вычисления из предыдущих столбцов в SQL.Я пытался использовать переменные, но безуспешно.Вот что у меня сейчас:

CREATE VIEW CalculationsTable (id, deltaLat, deltaLon, a, c, d) AS 
  SELECT Resource.id, 
    RADIANS("+lat+"-Resource.lat) AS deltaLat, 
    RADIANS("+lon+"-Resource.lon) AS deltaLon,
    (SIN(deltaLat/2)*SIN(deltaLat/2)) + COS("+lat+") 
       * cos(Resource.lat) * (SIN(deltaLon/2)
       * SIN(deltaLon/2)) AS a, 
    2 * ATAN2(SQRT(a), SQRT(1-a)) AS c, 
    6371 *c AS d 
  FROM Resource AS Resource;

Я продолжаю получать эту ошибку:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: неизвестный столбец «deltaLat» в'список полей'

deltaLat в ошибке - это deltaLat из этой части кода "(SIN(deltaLat/2)..."

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Вы можете попытаться переформатировать ваш запрос и использовать подтаблицу.Например,

SELECT calcValueA + 3,
  FROM (SELECT A + B calcValueA FROM yourTable);

Для запроса необходимо выполнить его несколько раз.

0 голосов
/ 05 декабря 2011

В тот момент, когда выполняются ваши вычисления, столбцы deltaLat и deltaLon не имеют псевдонимов, поэтому вы не можете ссылаться на них.Вам нужно обернуть псевдонимы столбцов в их собственный запрос, а затем использовать его как подзапрос.Я попробовал это ниже (только в редакторе), даже если это не работает, вы должны получить общее представление!

Кстати, я оставил ваши цитируемые термины в - не знаю, чтоони предназначены для

CREATE VIEW CalculationsTable (id, deltaLat, deltaLon, a, c, d) AS 
SELECT id, 
       deltaLat,
       deltaLon,
       a,
       c,
       6371 * c AS d 
FROM (
       SELECT id, 
              deltaLat,
              deltaLon,
              a,
              2 * ATAN2(SQRT(a), SQRT(1-a)) AS c
       FROM (
              SELECT id, 
                     deltaLat,
                     deltaLon,
                     (SIN(deltaLat/2)*SIN(deltaLat/2)) + COS("+lat+") 
                        * cos(lat) * (SIN(deltaLon/2)
                        * SIN(deltaLon/2)) AS a 
              FROM ( 
                     SELECT id, 
                            RADIANS("+lat+"-Resource.lat) AS deltaLat, 
                            RADIANS("+lon+"-Resource.lon) AS deltaLon
                            Resource.lat as lat
                     FROM Resource 
                   )
            )
     ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...