Bonjour,
Je suis sous SQL Server 2000. J'ai une vue qui m'est fourni par le service pilotage sur les données actuelles. Cette vue comporte 67 champs sans aucune clé primaire. Nous avons de notre côté une table d'historique qui se trouve à être un clone de cette vue, mais nous gardons une copie des données qui sont éliminées par le pilotage système.
Je veux exclure les données qui sont identiques entre les deux tables avec une correspondance sur les 67 champs. La solution idéale serait d'être sous la version 2005 et de faire un EXCEPT.
J'ai essayé les solutions suivantes :
1)
Ça ne me retourne rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT * FROM Table_Historique WHERE (NOT EXISTS (SELECT * FROM Table_pilotage))
2)
C'est long et laborieux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT champ1, champ2, ..., champ67, 'table1' AS tab FROM Table_Historique UNION ALL SELECT champ1, champ2, ..., champ67, 'table2' AS tab FROM Table_pilotage GROUP BY champ1, champ2, ..., champ67 HAVING MIN(tab) = 'table1' AND MAX(tab) = 'table1'
3)
Je me retrouve avec le même problème avec les jointures
Comment arriver à mes fins sans être obligé d'écrire tous les champs dans la requête?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM Table_Historique FULL OUTER JOIN Table_pilotage ON Histo.champ1 = pilotage.champ1, ...., histo.champ67 = pilotage.champ67) WHERE champ1 IS NULL
Le but recherché est de remplacer les données encores existantes par les données fraîches du pilotage, mais concerver les données délaissées par celui-ci.
Partager