Rechercher : dans
Par :

SQL JOIN + LIKE

Dernière réponse le 31 jui 2008 à 14:43:38 DAG, le 31 jui 2008 à 12:11:21 
 Signaler ce message aux modérateurs

Bonjour,
Est-il possible de faire une requete du genre :

SELECT tabletampon_rh_file.UNITEDAFFAIRE, tabletampon_rh_file.LIBELLEUNITEDAFFAIRE, tabletampon_rh_file.ENTITEDEGESTIONEDG, tabletampon_rh_file.LIBELLEENTITEDEGESTIONEDG, tabletampon_rh_file.NATURECONTRATTRAVAILGROUPE, tabletampon_rh_file.MOTIFINACTIVITE, tabletampon_rh_file.ACTIF, tabletampon_rh_file.ALTERN, tabletampon_rh_file.NONACTIF
FROM ouvrant_droit INNER JOIN tabletampon_rh_file
ON (tabletampon_rh_file.PRENOMUSUEL LIKE ouvrant_droit.prenom_OD AND tabletampon_rh_file.NOMUSUEL LIKE ouvrant_droit.nom_OD);


C'est à dire utiliser un LIKE dans la conditoon ?
tabletampon_rh_file.PRENOMUSUEL LIKE ouvrant_droit.prenom_OD AND tabletampon_rh_file.NOMUSUEL LIKE ouvrant_droit.nom_OD


Je n'arrive pas à trouver de solution !?

Si quelqu'un peut m'aider !?

Merci d'avance !

Meilleures réponses pour « SQL JOIN + LIKE » dans :
SQL - Jointures Voir Expression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...
Oracle - Echappement de caractères spéciaux VoirPour certaines requêtes SQL, nous avons besoin de rechercher des chaînes de caractères contenant des caractères spéciaux tels que '%' Dans l'exemple suivant, qui est faux, le besoin est de trouver les enregistrements contenant au milieu le...
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
SQL - Restriction VoirExpression des restrictions Une restriction consiste à sélectionner les lignes satisfaisant à une condition logique effectuée sur leurs attributs. En SQL, les restrictions s'expriment à l'aide de la clause WHERE suivie d'une condition logique...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...

1

DAG, le 31 jui 2008 à 12:13:24
  • +1

En fait les champs sont les mêmes sauf qu'il y a un espaces à la fin des données dans la table ouvrant_droit.prenom_OD et dans la table ouvrant_droit.nom_OD...
Du coup la requete du dessus ne retourne rien !

Il faudrait virer les espaces ou faire un LIKE...

Répondre à DAG

2

PRK, le 31 jui 2008 à 12:13:48

Il me semble que quand tu fais un LIKE dans une requete ^^

Ce qui suit doit etre precedé ou suivis de %% pour indiquer si ce que tu as fixé est en debut de mot ou en fin de mot ou au milieu..

Il faudrait que je revois mes cours pour en etre sur...
(^°°)> -----> < *__* >

Répondre à PRK

3

DAG, le 31 jui 2008 à 12:17:36

Oui oui il faut un % % genre SELECT * FROM matable WHERE donnee LIKE '%data%';
Mais moi je voudrais savoir si c'est possible d'utiliser LIKE avec le type de requete que je veux faire ?

Répondre à DAG

4

PRK, le 31 jui 2008 à 12:20:20

Ce que je trouve etrange c'est que tu veut faire une condition mais il n'y a pas de WHERE ~~ et ton ON je vois pas a quoi il pourrait correspondre..

(^°°)> -----> < *__* >

Répondre à PRK

5

PRK, le 31 jui 2008 à 12:21:06

Laisse tomber pour le ON j'avias mal lu (^°°)> -----> < *__* >

Répondre à PRK

6

Christounet, le 31 jui 2008 à 12:21:53

Bonjour,

Si tu veux supprimer les espaces dans tes variables, tu peux utiliser l'instruction TRIM au lieu de LIKE, exemple

SELECT tabletampon_rh_file.UNITEDAFFAIRE, tabletampon_rh_file.LIBELLEUNITEDAFFAIRE, tabletampon_rh_file.ENTITEDEGESTIONEDG, tabletampon_rh_file.LIBELLEENTITEDEGESTIONEDG, tabletampon_rh_file.NATURECONTRATTRAVAILGROUPE, tabletampon_rh_file.MOTIFINACTIVITE, tabletampon_rh_file.ACTIF, tabletampon_rh_file.ALTERN, tabletampon_rh_file.NONACTIF
FROM ouvrant_droit INNER JOIN tabletampon_rh_file
ON (tabletampon_rh_file.PRENOMUSUEL = trim(ouvrant_droit.prenom_OD) AND tabletampon_rh_file.NOMUSUEL = trim(ouvrant_droit.nom_OD));

A plus Un conducteur dangereux, c'est celui qui vous dépasse malgré­ tous vos efforts pour
l'en empêcher... (Woody Allen)

Répondre à Christounet

7

DAG, le 31 jui 2008 à 13:48:25

OK
Mais je veux supprimer les espace juste en fin de ligne.
je vais essayer.

Merci

Répondre à DAG

8

Christounet, le 31 jui 2008 à 13:52:10

Bonjour,

En fait l'instruction TRIM enlèves les espaces au début et à la fin de la variable, l'instruction LTRIM enlèves les espaces au début et l'instruction RTRIM enlèves les espaces en fin de variable, exemple

variable = '  Ceci est un test  '

TRIM(variable) sera égal à 'Ceci est un test'
LTRIM(variable) sera égal à 'Ceci est un test  '
RTRIM(variable) sera égal à '  Ceci est un test'


A plus Un conducteur dangereux, c'est celui qui vous dépasse malgré­ tous vos efforts pour
l'en empêcher... (Woody Allen)

Répondre à Christounet

9

DAG, le 31 jui 2008 à 14:08:20

C'est bizarre ma requête ne marche pas avec TRIM, LTRIM ou RTRIM !
J'ai pourtant bien le mêmes infos dans :
tabletampon_rh_file.PRENOMUSUEL et dans

ouvrant_droit.prenom_OD

et aussi dans tabletampon_rh_file.NOMUSUEL et dans
ouvrant_droit.nom_OD


N'y aurait-il pas des caractères "cachés" que MySQL rajoute ou autre ? Je ne comprend vraiment pas.

Je résume :
- J'ai une table tabletampon_rh_file dans laquelle j'ai un champs PRENOMUSUEL et un autre NOMUSUEL et d'autre champs.
- J'ai une autre table ouvrant_droit dans laquelle on retrouve les champs nom_OD ainsi que prenom_OD et d'autres infos.

Je voudrais récupérer toutes les infos de la table tabletampon_rh_file ou les champs PRENOMUSUEL et NOMUSUEL sont identiques aux champs nom_OD et prenom_OD de la table ouvrant_droit. (sachant que dans cette dernière table, il y a un espace apres la valeur du champs)...

Je pensais utiliser la bonne requête...

Quelqu'un verrait ou est le problème ?

Répondre à DAG

10

Christounet, le 31 jui 2008 à 14:19:24

Bonjour,

Ne devrais-tu pas inverser l'ordre de tes deux tables dans le INNER JOIN

FROM  tabletampon_rh_file INNER JOIN ouvrant_droit
ou bien inverser le ON
ON (trim(ouvrant_droit.prenom_OD) = tabletampon_rh_file.PRENOMUSUEL AND
trim(ouvrant_droit.nom_OD) = tabletampon_rh_file.NOMUSUEL)

A plus Un conducteur dangereux, c'est celui qui vous dépasse malgré­ tous vos efforts pour
l'en empêcher... (Woody Allen)

Répondre à Christounet

11

DAG, le 31 jui 2008 à 14:21:35

Je ne comprend pas trop le sens de INNER JOIN ? Comment ça marche ? Il a un sens pour faire sa jointure ?

Répondre à DAG

12

DAG, le 31 jui 2008 à 14:43:16

Ah, je ne comprend rien, j'ai beau le triturer dans tous les sens, il ne veux rien savoir ! Il ne me ramène aucun résultats !
Je me demande ça ne vient pas de mon code PHP que ne rentre pas bien les bonne données dans la table.
Voici le code qui rempli la table

ouvrant_droit
:

$statementOne = "SELECT 
				CIVILITE, NOM, PRENOM, DATEDENAISSANCE, DATEENTREESOCIETE, ADRESSEPERSO, CPPERSO, VILLEPERSO, MAILPERSO, MAILPRO, TRANCHEDEQF 
				FROM 
				tabletampon_od_file;";
$req = mysql_query($statementOne) or die('<br>Erreur base de donnée !<br>'.$statementOne.'<br>'.mysql_error());	
	
while ($data = mysql_fetch_array($req))
{
	echo 
	$statementTwo = "
	INSERT INTO OUVRANT_DROIT
	(
		civilite_OD, nom_OD, prenom_OD, date_naissance_OD, date_entree_societe_OD, adresse_perso_OD, code_postal_OD, ville_perso_OD, mail_perso_OD, mail_prof_OD, tranche_QF
	) 
	VALUES
	(
		\"$data[CIVILITE]\",\"$data[NOM]\",\"$data[PRENOM]\",\"$data[DATEDENAISSANCE]\",\"$data[DATEENTREESOCIETE]\",\"$data[ADRESSEPERSO]\",\"$data[CPPERSO]\",\"$data[VILLEPERSO]\",\"$data[MAILPERSO]\",\"$data[MAILPRO]\",\"$data[TRANCHEDEQF]\"
	);
	";

Répondre à DAG

13

 Christounet, le 31 jui 2008 à 14:43:38

Bonjour,

L'instruction INNER JOIN retourne les enregistrements lorsque chaque table contient des valeurs identiques pour les champs indiqués dans le ON. Tu trouveras ici plus d'informations sur les jointures (INNNER JOIN, LEFTJOIN et RIGHT JOIN).
Si par exemple, tu as dans ta table tabletampon_rh_file un enregistrement contenant un prénom ou un nom n'existant pas dans ta table ouvrant_droit, l'INNER JOIN ne retournera pas cet enregistrement.
Je pense que l'ordre du ON doit suivre l'ordre des tables.
A plus Un conducteur dangereux, c'est celui qui vous dépasse malgré­ tous vos efforts pour
l'en empêcher... (Woody Allen)

Répondre à Christounet