2011-04-03 5 views
-1

premier:Joindre deux tables MySQL avec des conditions

id_look  id_first name 
1   1   Jhon 
2   2   Mark 
3   3   Mike 

deuxième

id  id_first  surnames 
1  2   AAA 
2  2   BBB 
3  2   CCC 
4  1   DDD 
5  1   AAA 
6  1   BBB 
7  3   BBB 

Je veux obtenir tous id_look (même id_first) si le nom est AAA ET BBB

Ainsi, le résultat devrait être:

id_look 
1 
2 

parce que seulement que id_look contient AAA et BBB en même temps.

+1

Alors, quel est le problème? – KingCrunch

+0

Il est difficile de suivre votre question. – Eliasdx

+0

Si vous pouviez être un peu plus précis ... – linus72982

Répondre

5
SELECT id_look 
FROM `first` f 
     JOIN `second` s 
     ON s.id_first = f.id_first 
WHERE surnames IN ('AAA', 'BBB') 
GROUP BY id_look 
HAVING COUNT(DISTINCT surnames) = 2; 
+0

Cleane'n mieux, mais vous devriez backtick de manière appropriée;) – Christian

+0

Fonctionne bien dans ce scenerio mais qu'en est-il si dans le nom il y aura des chiffres et je veux vérifier si elle est dans la gamme, par exemple, je veux vérifier si le nom est> 20 et <50 et encore une fois si c'est BBB – DevSoft

+0

numéros dans un nom de famille? –

1

C'est un peu moche, mais ça va faire ce que vous demandez.

select id_look 
from first 
    inner join second as second_aaa 
    on second_aaa.id_first = first.id_first 
    and second_aaa.surnames = 'AAA' 
    inner join second as second_bbb 
    on second_bbb.id_first = first.id_first 
    and second_bbb.surnames = 'BBB' 
+0

+1 Pas moche du tout –

+0

Je frissonne quand je rejoins la même table plusieurs fois .. Par conséquent, pourquoi je pense que c'est moche ... :) Mais, ça marche ... L'approche de Martin est un peu plus à l'épreuve de l'avenir, si nous devions ajouter "CCC" et "DDD" à la condition bien. – squawknull