2016-09-27 2 views
1

J'ai une base de données locale que j'essaie d'insérer plusieurs lignes de données, mais je ne veux pas de doublons. Je n'ai pas de seconde DB que j'essaie d'insérer. J'ai un fichier sql. La structure est-ce pour le db j'insérer dans:insérer des données et éviter la duplication en vérifiant une colonne spécifique

(db)artists 
    (table)names->  ID | ArtistName | ArtistURL | Modified 

Je suis en train de faire cette insertion:

INSERT names (ArtistName, Modified) 
VALUES (name1, date), 
     (name2, date2), 
     ... 
     (name40, date40) 

La question est, comment puis-je insérer des données et éviter la duplication en cochant une colonne spécifique à cette liste de données que je veux inséré en utilisant SQL?

+2

Quels SGBDR utilisez-vous, mySQl, SQL server? – EoinS

+0

J'utilise le MariaDB avec SQLite activé à partir de xampp – DJSweetness

+0

Comment alimentez-vous les valeurs du CSV? Avez-vous un script à formater en format (nom1, date)? – EoinS

Répondre

0

Dupliquer quoi? Nom en double? Ligne en double? Je vais supposer aucun dup ArtistName.

  1. Avez UNIQUE(ArtistName) (ou PRIMARY KEY) sur la table.
  2. Utilisez INSERT IGNORE au lieu de IGNORE.

(Pas LEFT JOIN, etc.)

0

Je fini par suivre les conseils de CO @Hart un peu en insérant toutes mes valeurs dans une table complètement nouvelle. Ensuite, j'ai utilisé cette instruction SQL:

SELECT ArtistName 
FROM testing_table 
WHERE !EXISTS 
(SELECT ArtistName FROM names WHERE 
testing_table.ArtistName = testing_table.ArtistName) 

Cela m'a donné tous mes noms d'artistes qui étaient dans mes données et non dans la table des noms. J'ai ensuite exporté vers un fichier sql et ajusté INSERT un petit peu à insérer dans la table des noms avec les données correspondantes.

INSERT IGNORE INTO `names` (ArtistName) VALUES 
*all my values from the exported data* 

Où (ArtistName) pourrait avoir l'une des données retournées. Par exemple, (ArtistName, ArtistUrl, Modified). Tant que les valeurs renvoyées par l'export ont 3 valeurs.

Ce n'est probablement pas le plus efficace, mais cela a fonctionné pour ce que j'essayais de faire.