как рассчитать столбец, используя другой столбец в sql?

запрос на создание таблицы:

создать каталог таблиц (id int, ra double, decl double, zone int);

значение зоны рассчитывается от decl по формуле ниже:

CAST(FLOOR(decl) AS INTEGER),

я вставляю все значения id, ra, decl таблицы, затем мне нужно рассчитать значения зоны,

как рассчитать значение зоны таблицы в sql-запросе?

** в другой таблице, извлеченной из каталога, я хочу вычислить y из ra, decl в sql:

обновить набор извлеченных каталогов x= (cos(радианы(decl))cos(радианы(ra))); но ответил: соединение разорвано! есть ли проблемы с моим sql?*

Большое спасибо!


person user2706760    schedule 19.11.2013    source источник
comment
образец схемы базы данных поможет !!   -  person vhadalgi    schedule 19.11.2013
comment
Два очка. Во-первых, floor() возвращает целое число, поэтому cast() является избыточным. Далее, одно из правил нормализации — не хранить рассчитанные значения. Просто выберите расчет, когда вам это нужно.   -  person Dan Bracuk    schedule 19.11.2013


Ответы (2)


Разве ты еще не сделал это?

update catalog set zone=CAST(FLOOR(decl) AS INTEGER);

если это не сработает, попробуйте сделать это как самостоятельное соединение:

update catalog set zone=CAST(FLOOR(a.decl) AS INTEGER)
from catalog a
where 1=1;

На данный момент у меня нет доступного экземпляра БД, поэтому вам придется проверить это самостоятельно.

Как указал другой человек, вам вообще не нужно хранить зону, вы можете просто вернуть ее как вычисленное значение.

select CAST(FLOOR(a.decl) AS INTEGER) as zone
from catalog a
where 1=1;
person vogomatix    schedule 19.11.2013
comment
Что заставляет вас думать, что движок db - это mysql? ОП ничего не указал. - person Dan Bracuk; 19.11.2013
comment
На данный момент передо мной нет механизма БД, но ответы довольно общие SQL и должны работать с любой БД практически без изменений. Я исправил свой ответ, чтобы отразить вашу придирку :-P - person vogomatix; 19.11.2013
comment
не могли бы вы сказать мне, что означает 1 = 1? - person user2706760; 19.11.2013
comment
Это метод наличия предложения where, которое выбирает все строки. Это может быть не нужно - person vogomatix; 19.11.2013
comment
* в другой таблице, извлеченный каталог, я хочу вычислить y из ra, decl в sql: обновить набор извлеченных каталогов x = (cos (радианы (decl)) cos (радианы (ra))); но ответил: соединение разорвано! есть ли проблемы с моим sql? ra, decl вставляются в таблицы. - person user2706760; 19.11.2013
comment
Вы сказали, что хотите вычислить «y», но ваш SQL устанавливает «x». Что он? :-) - person vogomatix; 19.11.2013

вы захотите сделать что-то вроде этого:

update catalog set zone = CAST(FLOOR(decl) AS INTEGER);
person Brett Schneider    schedule 19.11.2013