2017-06-17 10 views
0

私は2つの列の列別に関連付けられている...MySQLのエラー

表:base_data

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

表:写真

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

私は、すべてのデータを選択したいをテーブル1(base_data)から、関連する行の1行をphotos:tableからどうやってそれを行うことができますか?

グループごとに最大n個のデータを選択したくない最初のテーブルのすべてのデータを選択し、最初のテーブルの行IDと一致する2番目のテーブルの1つの行のみを選択します。あなたは英数字最低の写真の名前をしたい場合は

私が欲しい結果...

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

結果を変更して、配列定義ではなくデータ出力をどのように見せるかを示してください。 – SandPiper

+0

これは別の[タグ:グループあたりの最大のn] SQLのようです。ソリューションは何度も投稿されています。 –

+0

いいえ、グループごとに最大のnを選択したくありません。最初のテーブルのすべてのデータを選択し、最初のテーブルの行IDと一致する2番目のテーブルの1つの行のみを選択します。 –

答えて

0

、MySQLの中で、あなたがこれを行うことができます:

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

lookにbase_dataテーブルに2つのエントリがあり、photosテーブルに5つのエントリがあります.base_dataテーブルの1つのエントリのidとp_idと一致する写真が1つだけ必要です。 –

1

を私はあなたが持つbase_dataを関連付けたいとし最初に撮影された写真で、最低の写真はphotos.idです。 MySQLでは、次のように書くことができます。 - p_id - 対応するレコードのうち、最も小さいものがidの中間クエリを作成します。次に、この中間クエリ結果を使用してbase_dataを左に結合します。多くのタイプミスがないことを願っています:-):

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

はい、あなたは正しく –

+0

ですが、私はちょうど写真テーブルからbase_dataテーブルと写真からidを選択できますか? –

+1

ありがとう、兄。 –