Sélection de valeurs distinctes

Sélection de valeurs distinctes - SQL/NoSQL - Programmation

Marsh Posté le 29-10-2008 à 12:54:56    

Hello all

 

J'ai 2 tables :

 

Table 1 :

 

id     value
8      kikoo
12    lol
31    asv
41    kikoo

 


Table 2 :

 

id     value
1      kikoo
2      lol
3      asv
4      kikoo

 


La table 2 est en fait identique à la table 1, sauf que les id ont été renumérotés suite à une migration. Du coup, ces id étant aussi liés à des clés étrangères d'autres tables, toutes mes relations sont foutues, normal.

 

J'ai donc voulu créer une table de correspondance entre les anciens id et les nouveaux, afin d'alimenter mes tables dépendantes correctement, via la requête suivante :

 
Code :
  1. CREATE TABLE #temp(old INT, new INT)
  2. INSERT INTO #temp SELECT o.id, n.id FROM table1 o INNER JOIN table2 n ON o.value = n.value
  3. SELECT * FROM #temp
 

J'obtiens ceci

 

old    new
8       1
12     2
31     3
41     1

 

le probleme saute donc aux yeux : sur la 4eme ligne, pour l'ancien id 41, j'ai 1 comme nouvel id au lieu de 4 et je suis donc dans le caca [:dawa]

 

un cador pour m'aider à dépatouiller ça ? :D

 

Merci les gros :hello:

 

edit: j'utilise SQL Server 2005


Message édité par Harkonnen le 29-10-2008 à 12:57:06

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2008 à 12:54:56   

Reply

Marsh Posté le 29-10-2008 à 13:00:40    

Pourquoi t'as pas conservé les id lors de la migration ? Y'avait des données déjà présentes ?


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 29-10-2008 à 13:02:09    

cosmoschtroumpf a écrit :

Pourquoi t'as pas conservé les id lors de la migration ? Y'avait des données déjà présentes ?


ben oui :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2008 à 13:03:00    

ok ; sinon je t'aurais dit d'utiliser IDENTITY_INSERT mais là je vois pas trop :o


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 29-10-2008 à 13:06:43    

T'as essayé de jouer avec 'INTERSECT'?

Reply

Marsh Posté le 29-10-2008 à 13:06:46    

ben si la base d'origine avait été vide, j'aurais même pas créé de topic hein [:god]
faut m'aider hein, sinon je dors au bureau :cry:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2008 à 13:07:30    

Moktar1er a écrit :

T'as essayé de jouer avec 'INTERSECT'?


ah tiens, spas con ça, j'y avais pas pensé
je regarde ça de suite
merci chef [:dawa]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2008 à 14:46:39    

Avec Oracle, tu aurais pu jouer avec rownum ou row_number(). Avec SQL Server, tu as p-ê l'équivalent, non ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 29-10-2008 à 14:54:05    

Je suis pas trop sûr de moi, mais à la base, ça reproduirait pas ce qu'il s'est passé ça ?
 
Parceque du coup t'as même pas besoin de lire tab2 ^^
 

Code :
  1. SELECT ROW_NUMBER() over(ORDER BY id), id, value
  2. FROM tab1;


 


                     id          value
-------------------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                    8           kikoo
2                    12          lol
3                    31          asv
4                    41          kikoo
 
(4 row(s) affected)

Message cité 1 fois
Message édité par MagicBuzz le 29-10-2008 à 14:54:30
Reply

Marsh Posté le 29-10-2008 à 14:54:59    

el muchacho a écrit :

Avec Oracle, tu aurais pu jouer avec rownum ou row_number(). Avec SQL Server, tu as p-ê l'équivalent, non ?


vi justement ^^

Reply

Marsh Posté le 29-10-2008 à 14:54:59   

Reply

Marsh Posté le 29-10-2008 à 16:03:03    

MagicBuzz a écrit :

Je suis pas trop sûr de moi, mais à la base, ça reproduirait pas ce qu'il s'est passé ça ?
 
Parceque du coup t'as même pas besoin de lire tab2 ^^
 

Code :
  1. SELECT ROW_NUMBER() over(ORDER BY id), id, value
  2. FROM tab1;


 


                     id          value
-------------------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                    8           kikoo
2                    12          lol
3                    31          asv
4                    41          kikoo
 
(4 row(s) affected)



rooo ptain, tu sais que je t'aime toi ? [:atsuko]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2008 à 16:41:31    

C'est le B.A.BA des fonctions analytiques. :o
Quand je disais que c'était vachement utile :o

Message cité 1 fois
Message édité par el muchacho le 29-10-2008 à 16:42:11

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 29-10-2008 à 16:56:22    

el muchacho a écrit :

C'est le B.A.BA des fonctions analytiques. :o
Quand je disais que c'était vachement utile :o


pis ça fait découvrir à quel point c'est utile le copier/coller, parceque la syntaxe... :sweat:

Reply

Marsh Posté le 29-10-2008 à 20:46:34    

Pour ton exemple, ça va, c'est facile, mais il y a d'autres cas qui sont de grosses prises de tête, ouais. De toute façon, la syntaxe de SQL est à mon avis son gros point faible. Ils ont voulu faire un pseudo langage naturel pour le rendre accessible aux non programmeurs, le résultat est qu'elle est extrêmement rigide et difficile à utiliser, à mon goût. La syntaxe impossible à mémoriser des fonctions analytiques est la conséquence directe de la syntaxe du SQL, langage qui d'évidence n'a jamais été prévu pour être extensible.
Les langages fonctionnels traditionnels, au contraire, sont flexibles et leur syntaxe est régulière et mémorisable.


Message édité par el muchacho le 29-10-2008 à 20:46:55

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed