Requête SQL HELP
Ferméjordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 - 21 oct. 2022 à 11:56
- Ora-00918
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Sql server recovery - Télécharger - Gestion de données
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Logiciel sql - Télécharger - Bases de données
- Sql replace plusieurs valeurs - Forum Programmation
4 réponses
4 oct. 2022 à 17:07
Bonjour,
Vu le message d'erreur, je suppose que tu es sur ORACLE (quelle version ? ) et non pas sur une base de données SQL SERVER.
Je déplace donc la question dans le bon forum.
Pour ce qui est de ton erreur, tu ferais bien d'utiliser des ALIAS partout. Je vois que tu as mis un "t1" pour une de tes tables .. et qu'ensuite dans ta requête tu fais appel à un "t2" dont je ne trouve pas la déclaration..
Et puis.. au lieu de t1 t2 .. il est plus simplet d'utiliser des alias en rapport avec le nom des tables
par exemple
from ABLRC.t_entarif ET left join ABLRC.t_detarif DT on ET.tar_cle= DT.rfc_cle
Tu remarqueras également que le code que je t'ai posté est "bien formaté" sur le forum... pour ça, lorsque tu postes du code sur le forum, merci d'utiliser le bouton prévu à cet effet..
Bonjour,
Pas plus tard qu'hier j'ai fait une requête du style que tu proposes. Je te mets la syntaxe pour que tu puisses t'y retrouver. Je ne pratique pas du tout Oracle, mais s'il s'agit de SQL peut-être cela pourra-t-il t'aider.
Ainsi, tu écrit 2 fois "Left Join" alors qu'il me semble qu'il ne faut l'écrire qu'une fois, mais par contre mettre "and" pour indiquer la 2ème liaison.
Ma requête SQL, avec mes tables et mes champs s'écrit ainsi :
"SELECT DISTINCT T_Services.NomService, T_BanqueAcc.LienSite, T_BanqueAcc.IB123, T_BanqueAcc.Act
FROM T_BanqueAcc LEFT JOIN T_Services ON (T_BanqueAcc.IB123 = T_Services.NoIndexService) AND (T_BanqueAcc.Act = T_Services.IdFonction)
WHERE (((T_Services.NomService) Is Not Null) AND ((T_Services.NoImmeubleService)=[forms]![Appartements]![Immeuble])) OR (((T_Services.NomService) Is Not Null) AND ((T_BanqueAcc.Act)=1))"
Enfin, juste une remarque toute personnelle que j'applique avantageusement depuis des années, c'est que, plutôt qu'écrire tes noms tout en majuscule avec des "_" pour séparer les fragments de noms, j'écris tout en minuscule avec des majuscules pour séparer les fragments de nom, ce qui rend la lecture bien plus facile, comme tu peux le voir dans l'exemple que je t'ai donné.
Bon courage
Bonjour,
Merci pour la compassion :)
En fait ce n'est pas tout à fait cela que je cherche à faire,
J'ai un fichier Article avec plusieurs dates de mise à jour des prix de ventes,
Ces dates sont antérieures ou postérieurs à la date du jour,
Je cherche à récupérer la dernière date avant ce jour et la futur
Il y a une table Article et une table Tarif,
La requete ci-dessous fonction sur la partie -- Actuelle date
Mais lorsque je rajoute la partie -- Futur date
j'ai le message -00918: column ambiguously defined
Merci pour l'aide
Michel
SELECT
TAR_STE "STE",
TAR_TYPE "TYPE TARIF",
TAR_REF "CODE TARIF",
ar_num "Code Article",
Actuel.TAR_DATE "DATE TARIF CLT",
Futur.TAR_DATE "DATE FUTUR TARIF CLT"
FROM ABLRC.T_ARTICLE
-- Actuelle date
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
from ABLRC.t_entarif t1
left join ABLRC.t_detarif on t1.tar_cle=rfc_cle
where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date<=sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
Actuel on tar_ste=ar_ste and tar_art=ar_num
-- Futur date
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
from ABLRC.t_entarif t1
left join ABLRC.t_detarif on t1.tar_cle=rfc_cle
where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date>sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
Futur on tar_ste=ar_ste and tar_art=ar_num
;
7 oct. 2022 à 16:52
Bonjour,
Je t'ai demandé d'utiliser l'icone qui sert à poster du code sur le forum afin qu'il s'affiche proprement !
Je t'ai également demandé de renommer tes alias de façon plus parlante .. et plus important .. de les utiliser PARTOUT dans tes conditions.
SELECT
TAR_STE "STE",
TAR_TYPE "TYPE TARIF",
TAR_REF "CODE TARIF",
ar_num "Code Article",
Actuel.TAR_DATE as DA,
Actuel.RFC_MTHT "PVDA",
Futur.TAR_DATE "DATE FUTUR TARIF CLT",
Futur.RFC_MTHT "PV HTHD Futur"
FROM ABLRC.T_ARTICLE
-- Actuelle date Client
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
from ablrc.t_entarif t1
left join ablrc.t_detarif on t1.tar_cle=rfc_cle
where tar_date in (select max(t2.tar_date) from ablrc.t_entarif t2 where t2.tar_date<=sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
Actuel on tar_ste=ar_ste and tar_art=ar_num
-- Future date Client
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
from ablrc.t_entarif t1
left join ablrc.t_detarif on t1.tar_cle=rfc_cle
where tar_date in (select max(t2.tar_date) from ablrc.t_entarif t2 where t2.tar_date>sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
Futur on tar_ste=ar_ste and tar_art=ar_num
WHERE AR_STE='32'
and ar_num = '11315'
;
Bonjour
j'ai simplifiée ma requête et j'ai le message
ORA-00918: column ambiguously defined
Merci pour votre aide
Michel
21 oct. 2022 à 11:56
Je vais te donner un exemple
SELECT T1.* ,T2.nom AS T2_NOM FROM matable1 T1 LEFT JOIN matable2 T2 ON T2.id = T1.id WHERE T1.nom = "toto"