2013-02-22 3 views
1

Je dois insérer un grand nombre de lignes à une table basic_data comme ceci:L'utilisation Duplicate KEY UPDATE pour grande insertion automatique

basic_data
client | max_sale | total_sales

CREATE TABLE `basic_data` (
`id` int(11) NOT NULL AUTO_INCREMENT , 
`customer` int(11) NOT NULL , 
`total_sales` decimal(15,2) NOT NULL , 
`max_sale` tinyint(2) NOT NULL , 
PRIMARY KEY (`id`), 
UNIQUE INDEX `customer` USING BTREE (`customer`) 
) 

Comme je l'ai (client, max_sale) et (client, total_sales) dans différentes requêtes, je voudrais savoir s'il est possible de remplir le tableau de sorte qu'un client a juste une ligne avec les deux valeurs max_sale et total_sales.

Mes requêtes d'insertion sont:

INSERT INTO 
basic_data (customer, max_sale) 
SELECT a.customer, a.max_sale 
FROM sales a 
.... 
GROUP BY customer; 


INSERT INTO 
basic_data (customer,total_value) 
SELECT customer, SUM(sales) total_value 
FROM sales a 
GROUP BY customer; 

Et j'ai lu je peux utiliser ON DUPLICATE KEY UPDATE mais ne parviennent pas à l'utiliser correctement.

Mes tentatives

INSERT INTO 
basic_data (customer,total_value) 
SELECT customer, SUM(sales) total_value 
FROM sales a 
GROUP BY customer 
ON DUPLICATE KEY person UPDATE total_value = ... 

ont échoué et je pense que c'est parce que ON DUPLICATE KEY ne fonctionne pas avec GROUP BY.

Une idée de comment stocker des données de cette façon? Grand merci.

Répondre

1

MISE À JOUR 1

INSERT INTO basic_data (customer,total_value) 
SELECT customer, total_value 
FROM 
(
    SELECT customer, SUM(sales) total_value 
    FROM sales a 
    GROUP BY customer 
) c 
ON DUPLICATE KEY UPDATE total_value = c.total_value 
+0

Mmm ne semble pas fonctionner, je reçois un 'Unknown column 'a.total_value' dans le message « list'' sur le terrain. – fedorqui

+0

essayer 'SUR DUPLICATE KEY UPDATE total_value = SUM (ventes)' –

+0

J'ai essayé et je reçois '[Err] 1111 - Utilisation invalide de la fonction de groupe' – fedorqui

Questions connexes