[SQL Server 2000] Requete SQL Comparer 2 table

Résolu
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 5 août 2008 à 11:32
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 8 août 2008 à 08:04
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

sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
8 août 2008 à 08:04
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.
3
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
6 août 2008 à 18:09
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)
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
6 août 2008 à 19:23
Arf Ok.

Merci pour ton aide.
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
7 août 2008 à 08:47
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
7 août 2008 à 09:34
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!
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
7 août 2008 à 09:57
<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.
0
Rejoignez-nous