[SQL Server 2000] Requete SQL Comparer 2 table [Résolu]

Signaler
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
-
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
-
Bonjour.

J'essaie de faire une requête qui me pose soucis!
Je vous explique, j'ai de table de structure identique dans 2 bases différentes, soit:
- base1.dbo.ma_table
- base2.dbo.ma_table

Je vous récupérer les lignes qui sont dans base1.dbo.ma_table mais pas dans base2.dbo.ma_table

J'ai essayé plusieurs chose :
SELECT  base1.dbo.ma_table.* FROM  base1.dbo.ma_table
WHERE NOT EXISTS
(SELECT base2.dbo.ma_table.* FROM base2.dbo.ma_table)

J'ai également essayé avec du NOT IN, MINUS,...
Mais rien n'y fait.

Pouvez-vous me donner un coup de main.
Merci.
sdisp

6 réponses

Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
1
Re.

J'ai trouvé mon erreur, c'est tout con!

Select base1.dbo.ma_table.int1, base1.dbo.ma_table.int2,
base1.dbo.ma_table.date1, base1.dbo.ma_table.xxx from base1.dbo.ma_table
LEFT OUTER JOIN base2.dbo.ma_table
ON base1.dbo.ma_table.int1= base2.dbo.ma_table.int1
AND base1.dbo.ma_table.int2= base2.dbo.ma_table.int2
AND base1.dbo.ma_table.date1 = base2.dbo.ma_table.date1
AND base2.dbo.ma_table.grnr is
null

Bonne journée.
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011

Tu ne peux pas comparer les champs globaux d'une table (champ *)

SELECT  base1.dbo.ma_table.MyId FROM  base1.dbo.ma_table
WHERE MyId NOT IN
(SELECT base2.dbo.ma_table.MyId FROM base2.dbo.ma_table)
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
1
Arf Ok.

Merci pour ton aide.
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
1
Bonjour.

Je viens de faire le test et je suis tombé sur un nouveau problème!
La clé de ma table est une clé composée sur 3 champs (int,int,date) (ce n'est pas moi qui ai créé la base!).

Je suis donc en train de faire le test en concaténant les 3 champs Cast(int1 as Varchar) +'-'+ Cast(int2 as Varchar) +'-'+ Cast(date1 as Varchar).

Mais je me demande si c'est vraiment là la solution!

Avez-vous une autre idée?

Merci.
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
1
Arf je viens de voir que le cast de la date en varchar converti le mois en lettre, se qui n'est peut être pas non plus très bien.
peut être caster plutot en float!
Messages postés
75
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
17 octobre 2008
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSTEPHA%7E1.PAR%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
En fouillant encore sur le net, je suis tombé sur quelque
chose qui me semble pas mal!

Utiliser le LEFT OUTER JOIN!


Ca me donnerais quelque chose comme cela:


Select base1.dbo.ma_table.int1, base1.dbo.ma_table.int2, base1.dbo.ma_table.date1, base1.dbo.ma_table.xxx from
base1.dbo.ma_table

LEFT OUTER JOIN base2.dbo.ma_table

ON base1.dbo.ma_table.int1= base2.dbo.ma_table.int1

AND base1.dbo.ma_table.int2= base2.dbo.ma_table.int2

AND base1.dbo.ma_table.date1 = base2.dbo.ma_table.date1

AND base2.dbo.ma_table.grnr = null


Qu'en dites-vous? Est-ce juste? Optimisé?

Merci.