Aller au contenu

select quand il n'y a pas de lien


Sujets conseillés

Posté

J'ai ces tables:

id | nom

1 | daniel

2 | mike

3 | dan

et un autre:

id_2 | ref

1 | 1

2 | 1

3 | 3

4 | 1

j'aimeri un sql pour m'afficher les noms du premier tableau de ceux qui n'apparaisent pas dans la deuxieme tableau en reference, c'est a dire:

'mike'

Posté
SELECT nom FROM table1 WHERE id NOT IN (SELECT DISTINCT ref FROM table2)

ou encore

SELECT t1.nom FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.ref WHERE t2.ref IS NULL
Posté (modifié)

Merci, vous savez quand c'est sous mon nez ca a l'air tres simple (pas pour join) mais il faut vraiment que je me creuse la tete pour me familiarisé avec join et d'autres techniques plus avancés en sql.

Vous voulez rigolez? Voici comment je traitez mon probleme avant d'avoir votre réponse:

	$sql = 'SELECT * FROM t1';
$result = mysql_query ($sql, $dbc);
$total1=@mysql_num_rows($result);
$sql = 'SELECT *
FROM t1, t2
WHERE t1.id = t2.ref
GROUP BY ref';
$result = mysql_query ($sql, $dbc);
$total2=@mysql_num_rows($result);

if($total1 == $total2){
echo 'Tous sont representees';
}else{
$sql = 'SELECT * FROM t1';
$result = mysql_query ($sql, $dbc);

echo '<ul>';
while($row = mysql_fetch_array ($result, MYSQL_BOTH)){
$ref = $row['id'];
$sql3 = "SELECT *
FROM t1, t2
WHERE t1.id = t2.ref
AND ref = $ref";
$result3 = mysql_query ($sql3, $dbc);
$total3=@mysql_num_rows($result3);
if($total3 == 0){ // pas dans la t2
$sql4 = "SELECT * FROM t1 WHERE id = $ref";
$result4 = mysql_query ($sql4, $dbc);
$row4 = mysql_fetch_array ($result4, MYSQL_BOTH);
$nom = $row4['nom'];
echo '<li>'.$nom.'</li>';
}
}
echo '</ul>';
}

Donc 2 sql pour comparer si tous les noms sont representees, si c'est pas le cas, on sql pour tous les noms, et dans une boucle on verifie si le sql cherhant un lien entre les 2 tables renvoie un ou plusieurs lignes en resultat, si elle renvoie rien, c-a-d que ce nom n'a pas de ref dans la t2, alors on REfais un sql avec la 'id' de celui ci dans la t1 pour recuperer leur nom pour l'afficher dans une liste..... ouf.... ou alors, on fais :

SELECT nom FROM t1 WHERE id NOT IN (SELECT DISTINCT ref FROM t2)

MERCI BEAUCOUP

Modifié par djp1988

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...