2009-10-07 10 views
0

J'ai une table dans une base de données, appelez ceci db x. J'ai une autre base de données, appelons-y y. Je veux copier des données de x.some_table vers y.some_table. Je ne veux pas faire une copie exacte de la table, car certaines colonnes n'ont pas de sens dans la base de données b. J'utilise la requête suivante:mysql insert imbriqué select from other db tronque double valeurs

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

a_filed dans les deux tables est défini comme DOULBE (17,0). Si je cours ceci: USE y; SELECT a_field FROM x;

Ensuite, je reçois en sortie avec des valeurs entières - pas de troncature à virgule flottante. Cependant, si après l'insertion en utilisant la première requête que j'ai montrée, je ne reçois que des nombres entiers dans y_sable.a_field. Les résidus à virgule flottante sont tronqués.

Qu'est-ce que je fais mal? Merci.

Répondre

1

Etes-vous sûr que la colonne est définie comme DOUBLE (17,0) dans les deux tables? Cela ne spécifie-t-il pas 17 chiffres totaux avec 0 après la virgule? Si oui, vous êtes sélectionné à partir de la table x devrait également avoir 0 décimales. Si elle est définie différemment dans x dis DOUBLE (17,6) et que vous essayez de l'insérer dans DOUBLE (17,0) alors les décimales seront tronquées je crois.

+0

Merci. Exactement le problème. Je n'ai pas pensé à regarder ici parce que les deux sont définis de cette façon. Peut-être que mon programme est confus quant au schéma qu'il regarde. Je vais vérifier dans la ligne de commande et voir. Merci. –

0

Vous ne savez pas ce qui provoque la troncature .. vous pouvez vous assurer que vous définissez correctement le type flottant .. si vous pensez que votre définition de table est OK, vous pouvez créer un script pour le tester par exemple, en PHP vous pourriez faire quelque chose comme -

$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); 
} 
Questions connexes