2017-06-17 1 views
0

J'ai deux colonnes une colonne associée à une autre ...Erreur MySQL pour la sélection des données

Tableau: base_data

id |---name----|-----des 
1 | some name1 | The description1 
2 | some name2 | The description2 

Tableau: les photos

id |---p_id----|-----photo 
1 |  1  | img1s.jpg 
2 |  1  | img1w.jpg 
3 |  2  | img2.jpg 
4 |  2  | img14.jpg 
5 |  2  | img15.jpg 

Je veux sélectionner toutes les données de la table 1 (base_data) et une rangée de la rangée associée des photos: tableau comment puis-je faire cela ???? Je ne veux pas sélectionner par le plus grand n par groupe Je veux sélectionner toutes les données de la première table et seulement une rangée de la deuxième table qui correspond à l'ID de la première table, juste d'abord correspondre pas autre.

le résultat que je veux ...

id |---name----|---des----|---p_id----|---photo----| 
1 | some name |the des..1| 1  | img1s.jpg| 
2 | some name |the des..2| 2  | img2.jpg| 
+0

Veuillez modifier votre résultat pour montrer comment vous voulez que la sortie de données apparaisse au lieu d'une définition de tableau. – SandPiper

+0

Cela semble être une autre question SQL [tag: most-n-per-group]. Des solutions ont été postées plusieurs fois. –

+0

Non, je ne veux pas sélectionner le plus grand n par groupe Je veux sélectionner toutes les données de la première table et seulement une rangée de la seconde table qui correspond à l'ID de la première table, juste première correspondance pas autre. –

Répondre

0

Si vous voulez que le nom de photo le plus bas alphanumériquement, MySQL vous pouvez le faire:

select 
    t1.*, 
    t2.photo 
from 
    base_data as t1 
    left join (
     select 
      p_id, 
      min(photo) as photo 
     from 
      photos 
     group by 
      p_id 
     ) as t2 on t2.p_id = t1.id; 
+0

regardez il ya deux entrée dans la table base_data, et 5 entrée dans la table des photos, je veux juste une photo pour l'entrée de la table base_data correspond avec son id et p_id. –

1

Je suppose que vous souhaitez associer à la base_data première photo prise, qui devrait être celle avec le plus bas photos.id. Dans MySQL, vous pouvez écrire ceci comme suit: Créez une requête intermédiaire qui donne - pour tout p_id - l'enregistrement correspondant avec le id le plus bas. Ensuite, à gauche rejoindre base_data avec ce résultat de requête intermédiaire. J'espère qu'il n'y aura pas beaucoup de fautes de frappe :-):

select b.id, p2.photo 
from base_data b left join 
    (select p.photo, p.p_id, min(id) from photos p group by p.p_id) p2 on b.id = p2.p_id 
+0

Oui, vous avez raison –

+0

mais comment puis-je simplement sélectionner ID de la table base_data et photo de la table des photos ???? –

+1

Merci beaucoup, mon frère. –