2017-04-19 4 views
0

Je reçois l'erreur "Code d'erreur: Colonne inconnue 't2.FSVisitsToDate' dans 'Liste des champs' lorsque j'exécute ma requête, mais je ne peut pas savoir où ma requête ne va pas. quelqu'un peut-il indiquer ce que je fait de mal?insérer dans ... sur les mises à jour en double provoque la colonne Inconnu dans la liste des champs, mais le champ existe

INSERT INTO CMCustomer 
     (CustomerNumber, 
      LastName, 
      FirstName, 
      Address, 
      City, 
      State, 
      ZIPCode, 
      PhoneNo, 
      DriverLicenseNo, 
      SocialSecNo, 
      TaxExempt, 
      ExternalRefNumber, 
      AuxField, 
      Comments, 
      FSLevelNo, 
      FSDateOpened, 
      FSLastVisit, 
      FSVisitsToDate, 
      FSVisitsThisPeriod, 
      FSPurchaseToDate, 
      FSPurchaseThisPeriod, 
      FSDiscountToDate, 
      FSDiscountThisPeriod, 
      FSPointsToDate, 
      FSPointsThisPeriod, 
      FSPromoPointsToDate, 
      FSPromoPointsThisPeriod, 
      LastUpdated, 
      Employee) 
SELECT t1.CustomerNumber, 
      t1.LastName, 
      t1.FirstName, 
      t1.Address, 
      t1.City, 
      t1.State, 
      t1.ZIPCode, 
      t1.PhoneNo, 
      t1.DriverLicenseNo, 
      t1.SocialSecNo, 
      t1.TaxExempt, 
      t1.ExternalRefNumber, 
      t1.AuxField, 
      t1.Comments, 
      t1.FSLevelNo, 
      t1.FSDateOpened, 
      t1.FSLastVisit, 
      t1.FSVisitsToDate, 
      t1.FSVisitsThisPeriod, 
      t1.FSPurchaseToDate, 
      t1.FSPurchaseThisPeriod, 
      t1.FSDiscountToDate, 
      t1.FSDiscountThisPeriod, 
      t1.FSPointsToDate, 
      t1.FSPointsThisPeriod, 
      t1.FSPromoPointsToDate, 
      t1.FSPromoPointsThisPeriod, 
      t1.LastUpdated, 
      t1.Employee 
FROM cm01process t1 
LEFT JOIN CMCustomer t2 ON t2.CustomerNumber = t1.CustomerNumber 
ON DUPLICATE KEY UPDATE   
     t2.FSVisitsToDate = t2.FSVisitsToDate + t1.FSVisitsToDate, 
     t2.FSVisitsThisPeriod = t2.FSVisitsThisPeriod + t1.FSVisitsThisPeriod, 
     t2.FSPurchaseToDate = t2.FSPurchaseToDate + t1.FSPurchaseToDate, 
     t2.FSPurchaseThisPeriod = t2.FSPurchaseThisPeriod + t1.FSPurchaseThisPeriod, 
     t2.FSDiscountToDate = t2.FSDiscountToDate + t1.FSDiscountToDate, 
     t2.FSDiscountThisPeriod = t2.FSDiscountThisPeriod + t1.FSDiscountThisPeriod, 
     t2.FSPointsToDate = t2.FSPointsToDate + t1.FSPointsToDate, 
     t2.FSPointsThisPeriod = t2.FSPointsThisPeriod + t1.FSPointsThisPeriod, 
     t2.FSPromoPointsToDate = t2.FSPromoPointsToDate + t1.FSPromoPointsToDate, 
     t2.FSPromoPointsThisPeriod = t2.FSPromoPointsThisPeriod + t1.FSPromoPointsThisPeriod; 

ce que je suis en train d'accomplir est de prendre un fichier d'un de mes magasins et l'importer dans ma base de données. Si elle est un nouveau client J'ai besoin de la ligne ajoutée, et si c'est un client en double j'ai besoin de champs mis à jour (points ajoutés à l'utilisateur)

+0

Vous devez montrer votre requête pour que nous puissions voir ce qui ne va pas dans votre requête. –

+0

La requête est déjà jointe. il est juste là dans le bloc de code, insérer dans .. à partir .. jointure gauche .. sur la requête de mise à jour de clé en double. –

+0

Je ne suis pas un expert sur cette fonctionnalité de mysql, mais ne devrait pas être 'SUR DUPLICATE KEY UPDATE FSVisitsToDate = t2.FSVisitsToDate + t1.FSVisitsToDate, ...' Pourquoi essayez-vous de définir 't2.FSVisitsToDate' ici . (encore aucun expert, mais cela se sent mal). – JNevill

Répondre

0

Je ne suis pas sûr de savoir pourquoi cela a fonctionné, donc j'aimerais que quelqu'un explique ain donc j'ai une meilleure compréhension, mais apparemment la requête se termine avec succès si je structure le « Duplicate ... » une partie de la déclaration comme ceci:

ON DUPLICATE KEY UPDATE   
     CMCustomer.FSVisitsToDate = CMCustomer.FSVisitsToDate + values(FSVisitsToDate), 
     CMCustomer.FSVisitsThisPeriod = CMCustomer.FSVisitsThisPeriod + values(FSVisitsThisPeriod), 
     CMCustomer.FSPurchaseToDate = CMCustomer.FSPurchaseToDate + values(FSPurchaseToDate), 
     CMCustomer.FSPurchaseThisPeriod = CMCustomer.FSPurchaseThisPeriod + values(FSPurchaseThisPeriod), 
     CMCustomer.FSDiscountToDate = CMCustomer.FSDiscountToDate + values(FSDiscountToDate), 
     CMCustomer.FSDiscountThisPeriod = CMCustomer.FSDiscountThisPeriod + values(FSDiscountThisPeriod), 
     CMCustomer.FSPointsToDate = CMCustomer.FSPointsToDate + values(FSPointsToDate), 
     CMCustomer.FSPointsThisPeriod = CMCustomer.FSPointsThisPeriod + values(FSPointsThisPeriod), 
     CMCustomer.FSPromoPointsToDate = CMCustomer.FSPromoPointsToDate + values(FSPromoPointsToDate), 
     CMCustomer.FSPromoPointsThisPeriod = CMCustomer.FSPromoPointsThisPeriod + values(FSPromoPointsThisPeriod); 

Je pense que vous pouvez faire référence à la table que vous insérez dans et la table à partir de laquelle vous insérez doit utiliser VALUES() Quelqu'un peut-il confirmer?