2017-10-17 5 views
0

Je suis en train d'exécuter le code ci-dessousma mise à jour sql ne marche pas commettras

update apidura_dwh.B2C_order_line 
join apidura_dwh.B2C_orders 
using (order_id) 
set apidura_dwh.B2C_order_line.order_date = apidura_dwh.B2C_orders.order_date; 
commit; 

fondamentalement juste vouloir ajouter la date de commande à la table de ligne - cela renvoie un message avec succès et dit que les lignes ont été modifiées - mais quand je demande la table de ligne de commande aucune ligne n'est changée.

enter image description here

il ne semble fonctionner que si je me joins au tableau des commandes

enter image description here

  • des idées sur la façon de faire ce travail?
+0

Quel client SQL utilisez-vous? At-il un bouton Commit? – wast

+0

J'éviterais d'utiliser la clause using dans les jointures sauf si vous êtes sûr à 100% (et pourquoi compter dessus) qu'il n'y a qu'une seule colonne dans chaque table que mysql peut utiliser. –

Répondre

0

Ceci suggère que vous avez des ordres non-correspondants ou des ordres avec NULL dates. Tout d'abord, je voudrais écrire la requête comme:

update apidura_dwh.B2C_order_line ol join 
     apidura_dwh.B2C_orders o 
     using (order_id) 
    set ol.order_date = o.order_date; 
commit; 

Pour vérifier si la mise à jour fonctionne - et en supposant que ol.order_id est NULL - alors vous pouvez faire:

select count(*) 
from apidura_dwh.B2C_order_line ol 
where ol.order_date is null; 

deux avant et après la mise à jour .

Vous pouvez chercher manque ids de commande en faisant:

select count(*) 
from apidura_dwh.B2C_order_line ol left join 
    apidura_dwh.B2C_orders o 
    using (order_id) 
where o.order_id is null; 

Et pour NULL dates à l'aide:

select count(*) 
from apidura_dwh.B2C_orders o 
where o.order_date is null; 
+0

Merci quatre votre réponse - Je n'ai trouvé aucune commande avec des dates manquantes ou ID de commande (dans le tableau des commandes B2C) - le problème est dans la table de ligne de commande que je ne peux pas remplir la colonne order_date avec une mise à jour. grâce –

0

Vous ne pouvez pas utiliser JOIN dans une requête UPDATE.

UPDATE B2C_order_line 
SET B2C_order_line.order_date = B2C_orders.order_date 
FROM B2C_orders 
WHERE 
B2C_order_line.order_id = B2C_orders.order_id; 

Essayez ceci.

+0

Merci - J'ai essayé, mais il m'a donné une erreur - je fait les changements ci-dessous MISE À JOUR B2C_order_line SET B2C_order_line.order_date = (sélectionnez B2C_orders.order_date DE B2C_orders OÙ B2C_order_line.order_id = B2C_orders.order_id); mais cela a juste eu le même problème –