Probleme de requete

bernie29

SELECT MATERIEL.id_materiel, MATERIEL.nom, MATERIEL.marque, ETRE.date, ETAT.etat
FROM ETAT INNER JOIN (MATERIEL INNER JOIN ETRE ON MATERIEL.id_materiel=ETRE.id_materiel) ON ETAT.id_etat=ETRE.id_etat
WHERE exists(
select id_materiel, max (date) as “date”
from etre
group by id_materiel)

est simplifiable normalement en: (enfin je trouve que cela est nettement plus lisible car les parentheses me paraissaient placé bizarrement)

SELECT MATERIEL.id_materiel, MATERIEL.nom, MATERIEL.marque, ETRE.date, ETAT.etat
FROM ETAT
INNER JOIN ETRE ON ETRE.id_date = ETAT.id_date
INNER JOIN MATERIEL ON MATERIEL.id_materiel=ETRE.id_materiel
WHERE exists(
select id_materiel, max (date) as “date”
from etre
group by id_materiel)

Concernant ta clause d existance, heu, du moment que celle ci te retourne quelque chose tu vas te retrouver avec plein de truc.
Ce que tu veux est completement different. Tu veux en realité la chose suivante:
1/ Trouver la derniere date d’utilisation (ou de ton truc) de ton materiel. (ta sous requete)
2/ faire ta requete externe

Exists, ne cherche a savoir que si la sous requete t as retourné une valeur, elle se moque de faire une comparaison, par contre toi tu veux une comparaions donc tu devrais plutot essayer de la remplacer par une des sous requetes fournis plus haut

SELECT MATERIEL.id_materiel, MATERIEL.nom, MATERIEL.marque, ETRE.date, ETAT.etat
FROM ETAT
INNER JOIN ETRE ON ETRE.id_date = ETAT.id_date
INNER JOIN MATERIEL ON MATERIEL.id_materiel=ETRE.id_materiel
INNER JOIN (select id_materiel, max (date) as “date” from etre group by id_materiel) etre2 ON etre2.date = ETRE.id_date AND etre2.id_materiel = ETRE.id_materiel

T as le droit d utiliser des sous requetes comme de finition de table temporaire dans les INNER JOIN. Apres j ai pas trop regardé ce que tu cherches vraiment a faire et il doit surement y avoir des simplifications qui sont faisables.

Il doit meme y avoir moyen de faire en sorte que ta sous requete utilise un des champs de ta requete externe comme variable ce qui simplifirait grandement les choses.
Je pense a un truc du genre:

SELECT MATERIEL.id_materiel, MATERIEL.nom, MATERIEL.marque, ETRE.date, ETAT.etat
FROM ETAT
INNER JOIN ETRE ON ETRE.id_date = ETAT.id_date
INNER JOIN MATERIEL ON MATERIEL.id_materiel=ETRE.id_materiel
WHERE ETRE.id_date =(
select max (date) as “date”
from etre etre_deuxieme_du_nom
WHERE etre_deuxieme_du_nom.id_materiel = ETRE.id_materiel
group by id_materiel)

(la je me souviens plus trop des conditions a remplir pour utiliser le champs d une table comme condition d’une sous requete mais ca doit etre un truc du genre… ca fait un baille que j ai pas fait de BDD / SQL … apres je peux te filer le lien d’un site avec des cours concernant le SQL en general et l algebre qui lui est associé :slight_smile:

Cdlt,