2010-04-07 5 views
1

Structure de la table ressemble à ceci:mySQL requêtes JOIN même table

Tableau: Colonnes acheteurs: id | organisation | ville | état

Tableau: Événements Colonnes: id | purchaser_id

Ma requête:

SELECT purchasers.*, events.id AS event_id 
FROM purchasers 
INNER JOIN events ON events.purchaser_id = purchasers.id 
WHERE purchasers.id = '$id' 

Ce que je voudrais faire, est de toute évidence pour sélectionner les entrées de leur carte d'identité de la table des acheteurs et joindre des événements. C'est la partie facile. Je peux aussi facilement passer à une autre requête pour obtenir d'autres acheteurs avec la même organisation, ville et état (il y en a plusieurs) mais je voudrais tout faire dans la même requête. Y a-t-il un moyen de le faire? En bref, attrapez les acheteurs par leur ID, puis sélectionnez d'autres acheteurs ayant la même organisation, la même ville et le même état.

Merci.

Répondre

2

Vous pouvez essayer quelque chose comme

SELECT p.*, 
     e.id 
FROM purchasers p INNER JOIN 
     events e ON e.purchaser_id = p.id INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 

La subselect originale retournera l'acheteur initial, puis un lien vers les acheteurs table en organisation, la ville et l'état

EDIT :

a modifié la requête , cela retournera toujours les doublons, mais seulement pour le nombre d'événements enregistrés par acheteur. Si vous souhaitez récupérer un DISTINCT liste des acheteurs, vous ne pouvez pas le faire avec l'ID d'événement , si vous avez besoin quelque chose comme

SELECT p.* 
FROM purchasers p INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 
+0

@astander qui est très impressionnant sql! Merci d'avoir aidé. Avec le dossier que je suis en train de tester, il y a 2 événements associés à l'un des acheteurs, puis 2 autres acheteurs en double avec le même nom, ville et état (je veux pouvoir fusionner les acheteurs). Votre exemple renvoie le même acheteur 4 fois (2 résultats pour chaque événement). Pensées? – jay

+0

Cherchez-vous simplement la liste DISTINCT des pruchasers, SANS les événements? –

+0

Je cherche a) l'acheteur qui a été identifié b) vérifier pour voir quels événements sont associés et c) d'autres acheteurs avec la même organisation, ville, état. Finalement, j'ai également besoin de vérifier et voir si ces autres acheteurs en double ont des événements qui leur sont rattachés. – jay