Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 06/06/2011, 10h24   #1
Invité de passage
 
Homme
Webmaster
Inscription : juin 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Webmaster
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2011
Messages : 4
Points : 1
Points : 1
Par défaut Problème de select imbriqué

Bonjour à tous ,

À vrai dire, je suis plutôt novice en sql, ou du moins j'en connais les grandes lignes, mais je suis tombé sur un cas où je dois fournir une requête assez complexe et pour laquelle je suis perdu...

Pour ce problème, j'ai deux tables (ou du moins deux de mes tables sont utilisées), à savoir T_Clients et T_Reservations, et voici, en "français", ce que devrait donner la requête :

Sélectionner les réservations dont la date est plus grande que la date d'échéance du client concerné, le tout trié par client.

J'avais pensé à un truc du genre, en sachant toutefois que c'est incorrect :

Code :
1
2
3
4
5
6
SELECT *
  FROM T_Reservations
 WHERE Resa_Date > (SELECT Client_Date_Ech
                      FROM T_Clients
                     WHERE Client_Id LIKE Resa_Client_Id)
 ORDER BY Resa_Client_Id
sachant que le Resa_Client_Id de la requête imbriquée doit être = à celui de la 1e requête...

Ai-je été assez clair ? Et y aurait-il quelqu'un qui pourrait m'aider ?

Merci d'avance.
opus32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 10h56   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Pour pouvoir émettre un avis sur ta requête, il faudrait déjà qu'on ait une idée de la structure de tes tables !

L'opérateur LIKE n'a d'intérêt que si on l'utilise avec des caractères génériques pour chercher des chaines correspondant à un modèle.
Pour comparer deux chaines de caractère, l'opérateur = est bien plus adapté.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h11   #3
Invité de passage
 
Homme
Webmaster
Inscription : juin 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Webmaster
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2011
Messages : 4
Points : 1
Points : 1
Ok pour l'opérateur "=", et sinon sorry, voici pour les structures des tables,
la table T_Reservations :

Resa_Id - int(15)
Resa_Piscine - char(2)
Resa_Date - date
Resa_Heure - time
Resa_Seance_Type - varchar(63)
Resa_Client_Id - int(11)

et la table T_Clients :

Client_Id - int(11)
Client_Nom - varchar(63)
Client_Prenom - varchar(63)
Client_Tel - varchar(23)
Client_Mail - varchar(63)
Client_Date_Val - date
Client_Date_Ech - date
Client_Mail_Auto - int(5)
Client_Rest - int(5)
Client_Pay - int(5)

ps : merci pour la rapidité et pour les balises "code" de mon 1e post, j'avais oublié
opus32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 12h19   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Une jointure entre les 2 tables devrait suffire :
Code :
1
2
3
4
5
SELECT r.*
FROM T_Reservations AS r
INNER JOIN T_Clients AS c ON r.Resa_Client_Id = c.Client_Id
WHERE r.Resa_Date > c.Client_Date_Ech
ORDER BY r.Resa_Client_Id
ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 12h26   #5
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Ta requête n'est pas totalement incorrecte et donnerait le bon résultat, mais une simple jointure fonctionne aussi bien.
Code :
1
2
3
4
5
6
7
SELECT	res.*
FROM	T_Reservations	res
	INNER JOIN
		T_Clients		cli
        ON  res.Resa_Client_Id = cli.Client_Id
		AND	res.Resa_Date > cli.Client_Date_Ech
ORDER BY cli.Client_Id
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 13h15   #6
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
A noter qu'avec une jointure interne, les 2 écritures (celle d'al1_24 et la mienne) sont équivalentes. Ce serait différent avec une jointure externe...
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 13h35   #7
Invité de passage
 
Homme
Webmaster
Inscription : juin 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Webmaster
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2011
Messages : 4
Points : 1
Points : 1
Un grand merci à tous, cependant, les alias ne semblent pas pris en compte sous phpMyAdmin (j'ignore si le problème vient de phpMyAdmin ou de MySQL)...

Voici la requête d'al1_24 (testé avec celle de ced et cela donne la même erreur) :

Code :
1
2
3
4
5
6
7
8
9
 
requête SQL: 
 
SELECT res . *
FROM T_Reservations res
INNER JOIN T_Clients cli ON res.Resa_Client_Id = cli.Client_Id
AND res.Resa_Date > cli.Client_Date_Ech
ORDER BY cli.Client_Id
LIMIT 0 , 30
et le message d'erreur :

Code :
1
2
3
4
 
MySQL a répondu:
 
#1054 - Unknown column 'cli.Client_Date_Ech' in 'on clause'
opus32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 13h50   #8
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Alors, ça devient compliqué, parce qu'il n'y a pas de raison que ça ne passe pas... il reste plus qu'à tester :

1) Si tu veux vérifier l'hypothèse phpMyAdmin, essaie avec un autre client ! (Il y a un client natif mysql en ligne de commande je crois, et sinon tu dois pouvoir en trouver d'autres)

2) Si tu penses que pour une quelconque raison l'alias ne pourrait pas être pris, essaie :

Code :
1
2
3
4
5
6
7
 
SELECT T_Reservations.*
FROM T_Reservations 
INNER JOIN T_Clients ON T_Reservations.Resa_Client_Id = T_Clients.Client_Id
AND T_Reservations.Resa_Date > T_Clients.Client_Date_Ech
ORDER BY T_Clients .Client_Id
LIMIT 0 , 30
3) J'ose pas trop émettre cette hypothèse, mais tu as peut être fait une faute de frappe dans le nom de la colonne Client_Date_Ech ?
=> Vérifie bien en regardant la description ou en faisant un select * from t_clients
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 13h50   #9
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Enlève déjà les espaces entre res et * sur la première ligne.
Ensuite, tu es sûr que la colonne s'écrit bien "Client_Date_Ech" ? Parce que les alias fonctionnent très bien sous MySQL (quelle est ta version ?), et le problème ressemble plus à une erreur dans le nom de la colonne que dans l'alias.

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 14h19   #10
Invité de passage
 
Homme
Webmaster
Inscription : juin 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Webmaster
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2011
Messages : 4
Points : 1
Points : 1
Bon.. autant pour moi.. là je vais vraiment passer pour une bille.. mais soyons honnête..

Effectivement pour toutes mes dates j'ai écrit Date sauf pour Client_Date_Ech où j'ai en fait appelé ce champ Client_Dat_Ech, allez savoir pourquoi

Bref mille mercis à tous
opus32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 15h38   #11
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Citation:
Envoyé par opus32 Voir le message
Bon.. autant pour moi.. là je vais vraiment passer pour une bille..
ça nous arrive tous à un moment ou à un autre
Tant qu'on ne détruit pas les données ...
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 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 18h53.


 
 
 
 
Partenaires

Hébergement Web