Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1446 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requète SQL : spécifique SQL Server ou standard selon vous ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requète SQL : spécifique SQL Server ou standard selon vous ?

n°580426
El_gringo
Posté le 01-12-2003 à 14:32:07  profilanswer
 

Je vous explique ma situation.
Je cherche à faire une recherche des mêmes colones dans 2 tables différentes, un truc du genre de ce qui suit :


(
select VAL1, VAL2, VAL3,  from TABLE1
UNION
select VAL1, VAL2, VAL3,  from TABLE2
)


Seulement, j'ai besoin de savoir de quelle table est issu chaque enregistrement récupéré. La meilleur solution que j'ai trouvée est de faire :


(
select VAL1, VAL2, VAL3, 'TABLE1' as SOURCE from TABLE2
UNION
select VAL1, VAL2, VAL3, 'TABLE2' as SOURCE from TABLE2
)


Et en dernier lieu, j'ai besoin que les enregistrements soient triés en fonction de leur source, et c'est là que j'ai un doute :
d'après vous, c'est du standard ce qui suit ? (j'ai uniquement pu tester sur SQL Server 2000).


(
select VAL1, VAL2, VAL3, 'TABLE1' as SOURCE from TABLE2
UNION
select VAL1, VAL2, VAL3, 'TABLE2' as SOURCE from TABLE2
) order by DOCUMENT


---------------
Les Vers Solitaires, on aime ... ou pas !
mood
Publicité
Posté le 01-12-2003 à 14:32:07  profilanswer
 

n°580435
vttman2
Je suis Open ...
Posté le 01-12-2003 à 14:39:41  profilanswer
 

Bof pour Oracle j'ai des doutes ...
 
Sinon tu créés une vue  
=>
create view Mavue
as
select VAL1, VAL2, VAL3, 'TABLE1' as SOURCE from TABLE1
UNION
select VAL1, VAL2, VAL3, 'TABLE2' as SOURCE from TABLE2
 
puis
=>
select * from mavue
order by source


Message édité par vttman2 le 01-12-2003 à 14:40:16
n°580464
El_gringo
Posté le 01-12-2003 à 15:10:44  profilanswer
 

L'intéret de la chose, c'est de faire l'opération en une seule requète.
 
EDIT : et de ne pas laisser de trace. On doit pouvoir réaliser ce type d'opération des milliers de fois sur différentes tables, sans générer de vues ou autres.


Message édité par El_gringo le 01-12-2003 à 15:14:47

---------------
Les Vers Solitaires, on aime ... ou pas !
n°580714
gizmo
Posté le 01-12-2003 à 17:04:47  profilanswer
 

à partir du moment où tu utilises un order by, tu génère implicitement une table temporaire, donc pour moi ta réticense à ne pas vouloir créer une vue temporaire dans une transaction ne tient pas.
 
Mais sinon, d'un point de vue purement standard, ta requète est correct. Reste à voir si elle est supportée partout

n°584157
MagicBuzz
Posté le 05-12-2003 à 23:45:28  profilanswer
 

comme El_gringo, je ne vois pas l'intérêt de passer par une vue ou une table temporaire.
 
cette syntaxe est 100% standard, mise à part qu'il ne faut pas utiliser de ( ). Le order by ne peux pas être appliqué à un membre d'un union, donc implicitement le moteur SQL sait que c'est pour l'ensemble de la requête.

n°586531
El_gringo
Posté le 09-12-2003 à 14:19:08  profilanswer
 

MagicBuzz a écrit :

comme El_gringo, je ne vois pas l'intérêt de passer par une vue ou une table temporaire.
 
cette syntaxe est 100% standard, mise à part qu'il ne faut pas utiliser de ( ). Le order by ne peux pas être appliqué à un membre d'un union, donc implicitement le moteur SQL sait que c'est pour l'ensemble de la requête.


 
Ce qui expliquerait mes nouveaux problèmes!
J'aurais besoin d'nue requète comme ceci:


(SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
ORDER BY val1, val2, val3
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER BY val1, val2, val3
) ORDER BY __SOURCE__


 
Mais si tu dis qu'on n'peux pas appliquer de ORDER BY aux membres d'un UNION, c normal que ça passe pas. Du coup qqn voit une solution a cet inextriquable problème !?


---------------
Les Vers Solitaires, on aime ... ou pas !
n°586539
tomlameche
Et pourquoi pas ?
Posté le 09-12-2003 à 14:29:42  profilanswer
 

El_gringo a écrit :


 
Ce qui expliquerait mes nouveaux problèmes!
J'aurais besoin d'nue requète comme ceci:


(SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
ORDER BY val1, val2, val3
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER BY val1, val2, val3
) ORDER BY __SOURCE__


 
Mais si tu dis qu'on n'peux pas appliquer de ORDER BY aux membres d'un UNION, c normal que ça passe pas. Du coup qqn voit une solution a cet inextriquable problème !?


Ou bien j'ai rien compris, ou bien il suffit de faire  
SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER By __SOURCE__, val1, val2, val3  
 [:spamafote]


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°586545
El_gringo
Posté le 09-12-2003 à 14:38:24  profilanswer
 

tomlameche a écrit :


Ou bien j'ai rien compris, ou bien il suffit de faire  
SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER By __SOURCE__, val1, val2, val3  
 [:spamafote]  


 
Non non, c'est pas le même chose. Cela dit c'est pas de ta faute, tu pouvais pas savoir avec l'exemple que j'ai donné.
En fait le "order by" du 1er membre peut être différent de celui du 2e membre. En fait, on pourrait très bien avoir (ces requètes sont générées par un programme que j'écris) :
 


(SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
ORDER BY [g]val7, val3, val1[/g]
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER BY [g]val2, val6, val11[/g]
) ORDER BY __SOURCE__  


 
C'est très important, car chaque "top" dépend de ces order by.
Mais là ça devient vraiment compliqué, j'vais être obligé de me démerder pour passer par des vues je crois.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°586560
tomlameche
Et pourquoi pas ?
Posté le 09-12-2003 à 14:49:07  profilanswer
 

El_gringo a écrit :


 
Non non, c'est pas le même chose. Cela dit c'est pas de ta faute, tu pouvais pas savoir avec l'exemple que j'ai donné.
En fait le "order by" du 1er membre peut être différent de celui du 2e membre. En fait, on pourrait très bien avoir (ces requètes sont générées par un programme que j'écris) :
 


(SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12
FROM         TABLE1
ORDER BY [g]val7, val3, val1[/g]
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12
FROM         TABLE2
ORDER BY [g]val2, val6, val11[/g]
) ORDER BY __SOURCE__  


 
C'est très important, car chaque "top" dépend de ces order by.
Mais là ça devient vraiment compliqué, j'vais être obligé de me démerder pour passer par des vues je crois.


Ah oui, en effet, c'est pas très pratique ce que tu veux ...
Une idée, peut être : tu ajoute un champ dans ta requete correspondant à la concaténation des valeurs à trier pour chaque table.
Par exemple :
SELECT     TOP 5 'TABLE1' AS __SOURCE__, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12, val7 || val3 || val1 as var_tri
FROM         TABLE1
UNION
SELECT     TOP 5 'TABLE2' AS __SOURCE__, VAL1, VAL2, VAL3, VAL4, VAL5, VAL6, VAL7, VAL8, VAL9, VAL10, VAL11, VAL12,val2 || val6 || val11 as var_tri
FROM         TABLE2
ORDER BY __SOURCE__, val_tri  


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°586622
El_gringo
Posté le 09-12-2003 à 15:28:39  profilanswer
 

Merci, c'est une bonne idée ça. Mais ça va poser tout un tas de compliquations. Finalement j'suis en train de m'en sortir avec des vues.


---------------
Les Vers Solitaires, on aime ... ou pas !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requète SQL : spécifique SQL Server ou standard selon vous ?

 

Sujets relatifs
[PHP/SQL] Insertion de caractères spéciaux dans une tableSyntaxe SQL
Requète impossible à faire simplement?sql requete aide please
Format date incompatible entre VB et SQL SERVERRequete NOT IN
aider mon pour ma requete Sql svpProblème de connexion entre SQL Server et une base mixte Access/SQL
Plus de sujets relatifs à : Requète SQL : spécifique SQL Server ou standard selon vous ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR