Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2011, 13h40   #1
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Par défaut Requête avec condition in

Bonjour tout le monde;
Je veux ecrire une requête comme
Code :
SELECT * FROM commandes WHERE code IN (SELECT commande FROM livraisons)
mais je veux que la condition soit avec deux champs c-a-d
Code :
SELECT * FROM commandes WHERE code, partie IN (SELECT commande, partie FROM livraisons)
Je ne sais pas comment la rédiger.
Merci pour tout le monde.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 14h08   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

il me semble que ta requete est bien plus generale que FIREBIRD ! n'aurais tu pas mieux fait de la faire sur le forum "language SQL" ?


j'imagine que tu as essaye :
Code :
1
2
3
4
5
SELECT * 
    FROM commandes 
    WHERE 
       code IN (SELECT commande FROM livraisons) 
      AND partie IN (SELECT partie FROM livraisons)
et quand est-il en utilisant le UNION ?
Code :
1
2
3
4
5
6
7
SELECT * 
    FROM commandes 
    WHERE code IN (SELECT commande FROM livraisons) 
UNION 
    SELECT * 
    FROM commandes 
    WHERE partie IN (SELECT partie FROM livraisons)
Neanmoins, je crains que cela ne te donne pas ce que tu souhaites a cause d'eventuelle WHERE a l'interieur des sous-requetes

a+

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 15h08   #3
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci dehorter olivier;
Effectivement, ma requette est une forme générale mais je crains recevoir dans les réponses des spécificités inexistantes en firebird ou perdre des spécificités spétiale de Firebird; c'est pour cela que je préfère la poser ici surtout qu'il existe la sous-rubrique SQL sous la rubrique firbird.
A propos de ta réponse, je pense qu'elle ne précise pas que le doublé (commande,partie) représente une clé dans la table commandes
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 15h47   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
j'ai peut etre une idee en utilisant la concatenation :

Code :
1
2
3
4
  SELECT *
    FROM Commandes
    WHERE Code || Partie IN (SELECT Commande || Partie
                               FROM Livraisons)
mais que va devenir l'indexation ??
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 16h05   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Sur certains SGBD la requête suivante fonctionne mais je ne sais pas si c'est le cas sur firebird :
Code :
1
2
3
SELECT *
  FROM Commandes
 WHERE (Code, Partie) IN (SELECT Commande, Partie FROM Livraisons)
Sinon utilise exists
Code :
1
2
3
4
5
6
SELECT *
  FROM Commandes c
 WHERE EXISTS (SELECT 1 
                 FROM Livraisons l
                WHERE l.commande = c.code
                  AND l.partie   = c.partie)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 20h53   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
Et :
Code :
1
2
3
SELECT commandes.code,commandes.partie ...  
FROM commandes 
JOIN livraisons ON  commandes.code=livraisons.commande AND   commandes.partie=livraisons.partie
?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 21h46   #7
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci makowski;
C'est exactement ce que j'ai fais juste avant que tu poste ton message.
Merci tout le monde.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h29.


 
 
 
 
Partenaires

Hébergement Web