0
votes

La colonne de mise à jour par valeur correspondante à des résultats de valeur uniques dans la sous-requête retourne plus d'une ligne

J'ai la table nommée Commandes CODE>:

UPDATE new_table
SET new_table.total_orders = (
SELECT COUNT(DISTINCT(order_id)) FROM orders
GROUP BY user_id
ORDER BY user_id ASC)
WHERE new.user_id = (SELECT DISTINCT user_id FROM orders);


0 commentaires

3 Réponses :


1
votes

Il y a votre problème: où new.user_id = (sélectionnez user_id distinct à partir de commandes); code>

Vous pouvez probablement utiliser la mise à jour avec une jointure pour le faire: P>

UPDATE new_table as t0
JOIN (
    SELECT user_id, 
    COUNT(DISTINCT order_id) As total_orders 
    FROM orders 
    GROUP BY user_id
) as t1
    ON t0.user_id = t1.user_id 
SET t0.total_orders = t1.total_orders


0 commentaires

1
votes

Vous pouvez simplement utiliser une agrégation dans votre commande d'origine Créer une table code> pour créer la colonne total_orders code> en même temps: xxx pré>

sortie : P> xxx pré>

Cependant, il s'agit de statique et ne se met pas à jour en tant qu'utilisateur crée plus de commandes. Il a probablement plus de sens de créer une vue code> code> (exactement la même requête, il suffit de remplacer Tableau code> avec la vue code>): p>

CREATE VIEW new_table AS
SELECT user_id, COUNT(order_id) AS total_orders
FROM orders
GROUP BY user_id


0 commentaires

0
votes

Vous avez juste besoin d'une sous-requête corrélée: xxx pré>

Cependant, je suppose que order_id code> est unique dans commandes code>. En outre, vous voulez probablement définir la valeur sur 0 code> s'il n'y a pas de commandes. P>

SO: P>

UPDATE new_table nt
    SET nt.total_orders = (SELECT COUN(*)
                           FROM orders o
                           WHERE o.user_id = nt.user_id
                          );


0 commentaires