Requète SQL : spécifique SQL Server ou standard selon vous ? - SQL/NoSQL - Programmation
Marsh Posté le 01-12-2003 à 14:39:41
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
Marsh Posté le 01-12-2003 à 15:10:44
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.
Marsh Posté le 01-12-2003 à 17:04:47
à 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
Marsh Posté le 05-12-2003 à 23:45:28
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.
Marsh Posté le 09-12-2003 à 14:19:08
MagicBuzz a écrit : comme El_gringo, je ne vois pas l'intérêt de passer par une vue ou une table temporaire. |
Ce qui expliquerait mes nouveaux problèmes!
J'aurais besoin d'nue requète comme ceci:
|
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 !?
Marsh Posté le 09-12-2003 à 14:29:42
El_gringo 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
Marsh Posté le 09-12-2003 à 14:38:24
tomlameche 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) :
|
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.
Marsh Posté le 09-12-2003 à 14:49:07
El_gringo a écrit :
|
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
Marsh Posté le 09-12-2003 à 15:28:39
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.
Marsh Posté le 01-12-2003 à 14:32:07
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 !