2010-05-09 6 views
0

Quelqu'un peut-il m'aider avec la syntaxe?insérer dans la table où sinon dans la liste

insert into history (company,partnumber,price) 
values ('blah','IFS0090','0.00') 
if company NOT IN ('blah','blah2','blah3','blah4','blah4') 
and partnumber='IFS0090'; 

Contexte:
J'ai une table d'historique qui stocke entreprise quotidienne, les produits et les prix. Mais parfois, une entreprise va se retirer pendant quelques jours. Compliquer le problème est parce que je ne fais qu'épargner CHANGEMENTS quotidiens aux prix seulement et pas snapshotting la liste des jours entiers (les données seraient énormes) quand j'affiche les données que la compagnie viendra toujours au prix des jours précédents. J'ai donc besoin de faire quelque chose comme ça, où un prix de 0.00 signifie qu'ils ne sont plus là.

Répondre

1

Utilisation:

INSERT INTO HISTORY 
    (company, partnumber, price) 
SELECT 'blah', 'IFS0090','0.00' 
    FROM HISTORY h 
    WHERE h.company NOT IN ('blah','blah2','blah3','blah4','blah4') 
    AND h.partnumber = 'IFS0090' 
0

Vous confondez deux concepts complètement différents dans votre déclaration. Choisissez:

  • Soit vous voulez insérer des valeurs constantes (dans ce cas libeller vos chèques dans votre langage de programmation et de générer le INSERT INTO ... VALUES (...) en conséquence)
  • ou insérer le contenu filtré d'une autre table.

Ce dernier est possible dans MySQL (c'est le INSERT ... SELECT syntax), la requête ressemblerait à ceci:

INSERT INTO history (...) 
SELECT ... 
FROM liveTable 
INNER JOIN moreTables ... 
--# this is a regular SELECT statement, as you might have guessed by now 
WHERE company NOT IN ('blah','blah2','blah3','blah4','blah4') 
AND partnumber='IFS0090'; 
Questions connexes