SQL SELECT INSERT INTO Générer des Id Unique
Je suis d'essayer de sélectionner une table de données et insérer ces données dans un autre fichier avec les mêmes noms de colonnes (il s'agit essentiellement de données en double). Cours syntaxe comme suit:
INSERT INTO TABLE1 (id, id2, col1, col2)
SELECT similiarId, similiarId2, similiarCol1, similiarCol2
FROM TABLE2
Le problème que j'ai est la génération de la clé unique de champs (déclaré comme étant des entiers) pour les nouveaux enregistrements insérés. Je ne peux pas utiliser table2 la clé de la table1 a données existantes et de l'erreur sur les valeurs de clés dupliquées.
Je ne peux pas changer le schéma de la table et ce sont des id personnalisé colonnes ne sont pas générées automatiquement par la DB.
est-il important de conserver les valeurs d'origine de clés?
ne pas insérer similarid de table2 et laissez table table1 générer un nouveau code pour les lignes
est l'ID dans le tableau 1 un IDENTIFIANT personnalisé ? Si non, vous pouvez utiliser l'IDENTITÉ de l'identité et va créer automatiquement les ID pour vous.
vous pouvez utiliser autoincrement pour table1 et ne l'insérez pas similarId dans le tableau 1 que le rs a dit.
Ne pouvez-vous pas simplement d'ajouter une colonne d'identité à table1 et faire de la nouvelle colonne de la clé primaire? Alors que vous venez de faire insérer la nouvelle colonne de clé primaire et de l'identité génère automatiquement vos clés.
ne pas insérer similarid de table2 et laissez table table1 générer un nouveau code pour les lignes
est l'ID dans le tableau 1 un IDENTIFIANT personnalisé ? Si non, vous pouvez utiliser l'IDENTITÉ de l'identité et va créer automatiquement les ID pour vous.
vous pouvez utiliser autoincrement pour table1 et ne l'insérez pas similarId dans le tableau 1 que le rs a dit.
Ne pouvez-vous pas simplement d'ajouter une colonne d'identité à table1 et faire de la nouvelle colonne de la clé primaire? Alors que vous venez de faire insérer la nouvelle colonne de clé primaire et de l'identité génère automatiquement vos clés.
OriginalL'auteur user1464435 | 2012-06-18
Vous devez vous connecter pour publier un commentaire.
Ne table1 avez un auto-incrément sur son champ d'id? Si oui, pouvez-vous perdre du similiarId de l'insertion et de laisser l'auto-incrément de prendre soin de clés uniques?
OriginalL'auteur alex stacey
Que par vous exigence que vous devez faire vous de la requête comme ceci:
Qu'ai-je fait ici:
Ajouté
ROW_NUMBER()
qui débutera à partir de 1, de sorte également ajoutéMAX()
fonction de l'ID de la table de destination.Pour une meilleure explication Voir ce SQLFiddle.
OriginalL'auteur hims056
Je ne sais pas si je understad vous correctement:
Vous voulez copier toutes les données de TABLE2, mais assurez-vous que la TABLE2.similiarId n'est pas déjà dans le tableau 1.id, c'est peut-être la solution à votre problème:
Maintenant, insérez ne manquera pas, en raison de violation de clé primaire parce que chaque id inséré sera plus grande, puis id sorcière était déjà là.
max
) et il est normal de changer la similiarID "clé" (pas de référentiel de problèmes). Sinon, ils pourraient avoir besoin de rouleau de leur propre séquence ou utiliser une table temporaire avec une identité.OriginalL'auteur Jarek Bielicki
Si le champ id est défini comme auto-id et de vous laisser de l'instruction insert, sql va générer des id unique à partir de la piscine.
OriginalL'auteur colonelclick
Dans SQL Server, nous avons la fonction ROW_NUMBER, et si je vous ai bien compris le code suivant va faire ce que vous avez besoin de:
ROW_NUMBER portera le nombre de chaque ligne, et vous pouvez ajouter une "valeur magique" pour faire ces valeurs différent de l'actuel max ID de TABLE1. Disons que votre courant max ID 6, puis l'ajout de 6 pour chaque résultat de la fonction ROW_NUMBER vous donnera 7, 8, 9, et ainsi de suite. De cette façon, vous n'aurez pas les mêmes valeurs pour la TABLE1 de la clé primaire.
J'ai demandé à Google et il m'a dit que Sybase a la fonction ROW_NUMBER (http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.12.0.1/dbusage/ug-olap-s-51258147.html), donc je pense que vous pouvez l'essayer.
ROW_NUMBER
fonction de mes connaissances?merci pour votre commentaire. Dans ce cas, je vous recommande l'approche pointé par Jarek Bielicki, ou à l'aide d'une table temporaire avec colonne d'identité comme une table intermédiaire si user1464435 veut garantir à ses séquentielle de nouveaux identifiants.
OriginalL'auteur Fabio
Si vous voulez faire un identique table pourquoi ne pas simplement utiliser (quick and dirty) Sélectionnez DANS la méthode ?
Espère que Cette aide.
OriginalL'auteur JsChoice
Faire de la table1 ID d'IDENTITÉ si ce n'est pas un identifiant personnalisé.
ou
Créer de nouveaux clé primaire dans la table table1 et de le rendre IDENTITÉ, et vous pouvez garder la précédente Id dans le même format (mais pas de clé primaire).
OriginalL'auteur yoozz
Votre meilleur pari peut être pour ajouter une colonne supplémentaire sur pour Table1 Table2.Id. De cette façon, vous gardez les deux jeux de Clés.
(Si vous êtes occupé avec une fusion de données, en conservant la Table1.Id peut être important pour les clés étrangères qui peuvent encore référence Table1.D'identité vous sera alors nécessaire de 'corriger' des clés étrangères des tables de référencement de Table1.Id, qui doivent à présent de référence applicables clé dans le tableau 2).
OriginalL'auteur StuartLC
Si vous avez besoin de votre 2ème tableau de garder les mêmes valeurs que dans le 1er tableau , puis ne pas appliquer
auto increment
sur le 2ème tableau.OriginalL'auteur Java Developers Guide
Si vous avez la grande plage, et que vous voulez facile, rapide à faire et ne se soucient pas de ID:
Exemple wit CONCAT
mais vous pouvez aussi REMPLACER
OriginalL'auteur Kamil Dąbrowski