2011-09-30 6 views
0
INNER

J'ai deux tables: utilisateurs: nom d'utilisateur id clan clans: id crête de clanSQL JOIN ou OUTER

J'essaie de faire la recherche par nom d'utilisateur avec la sortie du clan du nom d'utilisateur.

Requête:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` JOIN `clans` ON `users`.`username` LIKE '%gu%' 

Sortie:

id username clan  crest  
2 gusar     26_760.gif 
3 gusar11  Tong  26_760.gif 

Si clan est vide crête sera vide .. Mais ... (

Je veux le résultat suivant:

id username clan  crest  
2 gusar     
3 gusar11  Tong  26_760.gif 

Répondre

2

Vous vous joignez d'une table à l'autre en utilisant LIKE, généralement il y a peu de raison pour laquelle vous devez faire cela. Au lieu de cela, vous voulez probablement que dans une clause WHERE, et vous devriez joindre la table en utilisant une clé étrangère.

Vous souhaitez utiliser LEFT OUTER JOIN (ou LEFT JOIN pour faire court) pour tenter de faire correspondre toutes les lignes de la seconde table, mais pour afficher les valeurs NULL s'il n'y avait pas de match:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` 
FROM `users` 
LEFT JOIN `clans` ON `users`.`clan` = `clans`.`clan` 
WHERE `users`.`username` LIKE '%gu%' 

Rappelez-vous, dans votre table des utilisateurs, idéalement, vous devriez détenir l'ID de clan et non le titre du clan. Vous utiliseriez alors cette requête pour effectuer votre recherche:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` 
FROM `users` 
LEFT JOIN `clans` ON `users`.`clanid` = `clans`.`id` 
WHERE `users`.`username` LIKE '%gu%' 
2

Si vous voulez des résultats f À partir de la première table, même s'il n'y a PAS de correspondance dans la seconde table, vous voulez utiliser une LEFT OUTER JOIN.

0

Essayez

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` LEFT JOIN `clans` ON `users`.`username` LIKE '%gu%' 
0

Vous devez joindre à la table à l'aide d'une condition. Vous utilisez un ON où vous devriez utiliser un WHERE. Je suppose users. clan concerne clans. clans? Essayez ceci:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` LEFT JOIN `clans` ON `users`.`clan` = `clans`.`clan` WHERE `users`.`username` LIKE '%gu%'