1

データベースに 2 つのテーブルがあります。テーブル クライアントは次のようになります。

----------------------------
|id | name | age | gender  |
|---------------------------
|1  | CL1  | 22  |  M      |
|2  | CL2  | 23  |  M      |
|3  | CL3  | 24  |  M      |
|4  | CL4  | 25  |  F      |
|5  | CL5  | 26  |  NA     |
----------------------------

現在、このクライアント テーブルに関連する別のテーブルがあります。上記のテーブルの「id」は AUTO_INCREMENT ではなく、UNIQUE であることに注意してください。

2 番目のテーブルは、クライアントのポートフォリオ画像を含む「画像」で、次のようになります。

 ------------------------------
|id | client_id | url         |
|------------------------------
|1  | 1         | img1_1.jpg  | 
|2  | 1         | img1_2.jpg  | 
|3  | 1         | img1_3.jpg  | 
|4  | 2         | img2_1.jpg  | 
|5  | 2         | img2_2.jpg  |
-------------------------------

私が基本的に達成しているのは、名前、年齢、性別などを含むクライアントテーブルからすべての結果を取得し、画像テーブルから最初と1つの結果を取得したいということです。つまり、クエリを実行すると、imag1_1.jpgを表示する必要がありますクライアントテーブルでCL1をクエリすると、画像テーブルから。このために、私は次のようなことをしています:

SELECT DISTINCT c.* , i.* FROM clients c LEFT JOIN images i ON i.client_id = c.id

このクエリは結果を返しますが、結果はさらに重複しています。それでも重複が返される場合は、得られないか、DISTINCT が何を表しているのか混乱しているか、何かが欠けている可能性があります。

に関するヘルプをいただければ幸いです。

一番、

アサン

4

3 に答える 3

1

「最初」が最小のレコードを意味すると仮定すると、グループごとの最小値images.idの後になります。

SELECT * FROM images NATURAL JOIN (
  SELECT   client_id, MIN(id) id
  FROM     images
  GROUP BY client_id
) t JOIN clients ON clients.id = images.client_id
于 2013-07-12T19:54:59.023 に答える