MySQL вставлять вложенный выбор из других БД усекает двойные значения - PullRequest
0 голосов
/ 07 октября 2009

У меня есть таблица в одной базе данных, назовите это db x. У меня есть другая база данных, назовите ее y. Я хочу скопировать данные из x.some_table в y.some_table. Я не хочу делать точную копию таблицы, потому что некоторые столбцы не имеют смысла в базе данных b. Я использую следующий запрос:

INSERT INTO y.some_table (a_field) SELECT a_field FROM x.some_table;

a_filed в обеих таблицах определяется как DOULBE (17,0). Если я запускаю это: USE y; SELECT a_field FROM x;

Затем я получаю вывод с полными значениями - без усечения с плавающей точкой. Однако, если после вставки с использованием первого запроса, который я показал, я получаю только целые числа в поле y some_table.a_field. Остатки с плавающей точкой усекаются.

Что я делаю не так? Спасибо.

Ответы [ 2 ]

1 голос
/ 07 октября 2009

Вы уверены, что столбец определен как DOUBLE (17,0) в обеих таблицах? Разве это не определяет 17 полных цифр с 0 после десятичной дроби? Если это так, вы выбираете из таблицы х также должны иметь 0 десятичных знаков. Если оно определено по-другому в x, скажем DOUBLE (17,6), и вы пытаетесь вставить его в DOUBLE (17,0), то я думаю, что десятичные знаки будут усечены.

0 голосов
/ 07 октября 2009

Не уверен, что вызывает усечение. Вы можете убедиться, что правильно установили плавающий тип. Если вы считаете, что с вашей таблицей в порядке, вы можете создать скрипт для ее проверки например, в PHP вы можете сделать что-то вроде -

$sql = "SELECT your_select_field FROM your_table";
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)) {
   $sql_ins = "INSERT INTO your_insert_table SET your_field = '".$row['your_select_field']."' ";
   $res_ins = mysql_query($sql_ins);
}
...