2009-09-15 6 views
0

J'ai deux tables dont j'ai besoin pour sélectionner les données de TABLE_A et TABLE_B; ils ont une relation de un à plusieurs.Mysql sélectionner le groupement

Dans mon instruction select, j'obtiens souvent plusieurs résultats uniques de TABLE_A et c'est très bien. Mais j'obtiendrai également plusieurs correspondances dans TABLE_B - J'ai besoin d'obtenir l'enregistrement TABLE_B le plus récent qui correspond. J'ai une étiquette d'identification automatique incrémentée qui est disponible.

Voici un exemple plus détaillé:

TABLE_A

TABLE_A_id data 
----------------------------- 
1   something  
2   somethignelse  
3   yetagainsomething 

TABLE_B

TABLE_B_id TABLE_A_id data 
------------------------------------ 
1   1   filler_data1 
2   1   filler_data1 
3   1   filler_data3 
4   2   filler_data4 
5   2   filler_data5 
6   3   filler_data1 

je dois sélectionner les données telles que mon tableau retourné est quelque chose comme ça pour une recherche sur lignes contenant "filler_data1":

`TABLE_A_id` = 1, something, `TABLE_B_id` = 2, filler_data1 

`TABLE_A_id` = 3, yetagainsomething, `TABLE_B_id` = 6, filler_data1 

Donc, dans le cas ci-dessus, j'obtiens les données TABLE_B qui sont les plus récentes, c'est-à-dire TABLE_B_id = 2 et correspondent à la recherche de "filler_data1".

+0

et si votre question était? – mauris

+0

Mes questions sont ce que MySQL va faire pour moi. J'ai besoin d'une instruction qui va générer plusieurs lignes TABLE_A avec seulement le plus récent match TABLE_B –

+0

Pouvez-vous modifier votre message ci-dessus et montrer un exemple? –

Répondre

1

Il s'agit de la question «N plus grande par requête de groupe» qui s'affiche plusieurs fois par semaine sur StackOverflow.

SELECT A.*, B1.* 
FROM TABLE_A A 
JOIN TABLE_B B1 ON (A.A_ID = B1.A_ID) 
LEFT OUTER JOIN TABLE_B B2 ON (A.A_ID = B2.A_ID AND B1.B_ID < B2.B_ID) 
WHERE B2.B_ID IS NULL; 
+0

Celui-ci ne donne qu'un seul résultat de TABLE_A où je dois être capable d'obtenir des multiples, bien que sur une seule requête il obtienne l'enregistrement TABLE_B correct –

0

Une approche que j'ai pris dans le passé est de créer une vue de table_b qui contient les informations les plus récentes, puis rejoindre table_a à cela. Affaire au point. Nous avons un système de suivi des incidents. Une table contient toutes les données constantes liées à l'incident, table_a. La deuxième table, table_b, agit comme une table d'audit et suit les mises à jour de l'incident. J'ai créé une vue des mises à jour les plus récentes pour chaque incident spécifique, j'utilise cette vue pour divers rapports, mais je peux joindre cette table à ma table_a pour produire des résultats qui produisent les dernières informations sur l'incident.