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

 


Dernière réponse
Sujet : [SQL] Probleme bateau ?
MagicBuzz c'est un fait ;)
d'où ma toute première question :D
 
:fou:

 

[edit]--Message édité par magicbuzz--[/edit]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
MagicBuzz c'est un fait ;)
d'où ma toute première question :D
 
:fou:

 

[edit]--Message édité par magicbuzz--[/edit]

wouatouwouatou l'idée y est .. magic.. mais moi ya le

Code :
  1. having

:D
mais, le pb. c ke la syntaxe de la jointure externe depend du sgbd :(

MagicBuzz Pkoi vous répétez bêtemment ce que j'ai déjà écrit ?
wouatouwouatou ouais.. mais la fonction nvl() ... jsais pas si on peux facilement la trouver sur d'autres sgbd...
Je voulais surtout parler de la jointure externe :D
et avec un union on essaie au plus de rester standard
jupiler pourquoi se faire chier avec un union:
 
SELECT C.CHEESENAME, nvl(R.RATING, 0)  
FROM CHEESE C, RATES R  
WHERE  
C.CHEESENAME=R.CHEESENAME (+)
 
c'est aussi pour Oracle
wouatouwouatou Ca y est.. ej crois que jai une soluce... :D
Mais c pour ORACLE... ptet ke tu peux le modifier pour sql-server.
 

Code :
  1. SELECT C.CHEESENAME, R.RATING
  2. FROM CHEESE C, RATES R
  3. WHERE
  4. C.CHEESENAME=R.CHEESENAME
  5. UNION
  6. SELECT C.CHEESENAME, 0
  7. FROM CHEESE C, RATES R
  8. WHERE
  9. C.CHEESENAME=R.CHEESENAME(+)
  10. HAVING
  11. R.RATING IS NULL

wouatouwouatou hihihi... Ca ressemble fort a mon pb..
Enfin.. je veux dire par la ke ton chef de projet si t'en a un... il a du faire la meme ecole ke le mien :D:D:D
Sinon, pour ton pb.. je me penche dessus..
Hugo_Toorop Ben ouais, en principe, on a pas le droit aux vues, on nous a demandé de tout faire en une seule requete. Mais c'est vrai que c'est tres con, surtout qu'on a le droit d'utiliser que cette grosse antiquité d'Interbase :D
La premiere requete que tu m'as donné, en enlevant la SELECT FROM SELECT donne en partie la réponse, c'est déja ca ! Sinon, je vais chercher dans la doc d'Interbase comment faire une jointure externe, il y a peut-etre une technique toute con pour faire ca. Merci pour ton coup de main ! :)
MagicBuzz L'avantage de la vue, c'est que :
 
1) C'est aussi rapide d'éxécution (surtout là, où y'a pas de grosses jointures)
 
2) Les données sont mises à jour instantanément
 
3) Aucune place sur le disque utilisée
MagicBuzz Mais le mieu, c'est de conserver "NULL"
 
Ben ouais... Entre "Pas de note" et 0, y'a un monde ! ;)
 
Deplus, pkoi tu veux faier une table de plus ?
Les vues, ça sert à ça :p
 
CREATE OR REPLACE VIEW RATES_ALL AS
SELECT cheese.cheesename, rates.rate
FROM chesse, rates  
WHERE cheese.cheesename *= rates.cheesename
 
 
ou
 
 
CREATE OR REPLACE VIEW RATES_ALL AS
SELECT cheese.cheesename, rates.rate
FROM chesse, rates  
WHERE cheese.cheesename = rates.cheesename(+)
 
le (+) je sais jamais où faut le mettre :lol:
MagicBuzz Sinon, en simple, suffit de faire une jointure externe puis remplacer la valeur NULL par 0 à la volée...
 
Mais je trouve plus la syntaxe :(
 
SQL Server : (mais c'est celui qui est le plus éloigné de tous à ce niveau, car il utilise les fonction VB...)
 
SELECT cheese.cheesename, replace(rates.rate, NULL, 0)
FROM chesse, rates
WHERE cheese.cheesename *= rates.cheesename

 

[edit]--Message édité par magicbuzz--[/edit]

Hugo_Toorop Je viens d'essayer, il accepte les IN SELECT mais pas les FROM SELECT, et la deuxieme solution que tu donnes, il la veut pas non plus ! Il y a un moyen de contourner ca, sans faire appel aux vues ?
MagicBuzz PS: Euh... Si pas la même occasion tu voulais bien même un ID (auto-incrément) de type "INTEGER" en clé primaire, ce serait cool ;)
MagicBuzz S'il accepte "SELECT FROM SELECT" et "IN SELECT", c'est bon :)
 
PS: S'il se croûte comme un bleu il reconnait peut-être d'autes syntaxes genre :
 
SELECT RES_TAB.CHEESENAME, RES_TAB.CHESSE_RATE_FROM (  
  SELECT CHEESE.CHEESENAME, RATES.CHESSE_RATE  
  FROM   CHEESE, RATES  
  WHERE  CHEESE.CHEESENAME = RATES.CHEESENAME  
  UNION  
  SELECT CHEESENAME, 0  
  FROM   CHEESE  
  WHERE  CHEESENAME NOT IN (SELECT CHEESENAME FROM RATES)  
) AS RES_TAB
 
(SQL Server)
MagicBuzz Bon, y'a plus simple, mais je trouve plus... :(
 
SELECT CHEESENAME, CHESSE_RATE_FROM (
  SELECT CHEESE.CHEESENAME, RATES.CHESSE_RATE
  FROM   CHEESE, RATES
  WHERE  CHEESE.CHEESENAME = RATES.CHEESENAME
  UNION
  SELECT CHEESENAME, 0
  FROM   CHEESE
  WHERE  CHEESENAME NOT IN (SELECT CHEESENAME FROM RATES)
)
 
(Oracle)

 

[edit]--Message édité par magicbuzz--[/edit]

Hugo_Toorop J'utilise Interbase 5.5, il date un peu (1998).
MagicBuzz C'est en effet une fonction "Avancée" de SQL non spécifiée dans la norme initiale, et donc chacun à choisi sa propre solution...
MagicBuzz Sous quel SGDB-R ?
Hugo_Toorop J'ai une autre petite question a propos d'une requete SQL. Voila, j'ai deux tables, l'une avec des noms de fromage, et l'autre avec des notes pour certains de ces fromages (tous n'ont pas été noté). Par exemple :
 

Citation :


[I]Table CHEESE :[/I]
CHEESENAME                      
==============================  
 
Gorwydd Caerphilly              
Bath Soft                      
Single Gloucester              
Devon Oke
 
[I]Table RATES :[/I]
CHEESENAME                          RATING  
============================== ===========  
 
Gorwydd Caerphilly                       4  
Single Gloucester                        5  


 
Et ce que j'aimerai, c'est faire une requete pour generer une troisieme table, avec la liste des 4 fromages, et en mettant la note '0' pour les fromages qui ne sont pas deja noté (c'est-a-dire dans ce cas 'Bath soft' et 'Devon oke'). Comme ca :
 

Citation :


[I]Table RATES_ALL :[/I]
CHEESENAME                          RATING  
============================== ===========  
 
Gorwydd Caerphilly                       4  
Single Gloucester                        5  
Bath Soft                                0
Devon Oke                                0


 
Mes connaissances en SQL date d'il y a plus d'un an, et je n'ai plus la moindre d'idée de la facon de faire ca ! Quelqu'un aurait une idée ?? Merci d'avance !

 

[edit]--Message édité par Hugo_Toorop--[/edit]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)