2016-05-12 38 views
1

我有兩個表objectTablephoto_table。這裏從objectTableSQLite內部連接限制1

ID TEXT 
1 Kaunas 
2 Vilnius 
3 Palanga 
4 Prienai 

的樣本數據,在這裏從photo_table

OBJECT_ID PHOTO_ID NAME 
1   7  tets7.jpg 
1   8  tets8.jpg 
1   9  tets9.jpg 
1   10  tets10.jpg 
1   11  tets11.jpg 
2   3  tets3.jpg 
2   2  tets2.jpg 
3   1  tets1.jpg 
3   5  tets5.jpg 
4   6  tets6.jpg 
4   7  tets7.jpg 
4   8  tets8.jpg 

所以數據,你可以看到一個對象可以有很多pictuure。我需要得到evety對象的第一張圖片(我的輸出應該是)

ID TEXT NAME 
1 Kaunas tets7.jpg 
2 Vilnius tets3.jpg 
3 Palanga tets1.jpg 
4 Prienai tets6.jpg 

這是我的查詢:

select * 
from objectTable 
inner join photo_table 
    on photo_table.OBJECT_ID = (select OBJECT_ID 
           from photo_table 
           where photo_table.OBJECT_ID = objectTable.ID 
           order by photo_table.OBJECT_ID desc 
           limit 1). 

不過我揣摩幾乎3小時爲什麼這個查詢不工作。我錯過了什麼?我的邏輯正確嗎?

+0

您的樣本輸出沒有意義的照片。你說你想要得到每一個物體的第一張照片,但是什麼使得照片「首先?」對於樣本輸出中的第二個結果,照片必須按照與按升序排序的其他照片相反的順序排序。你確定'tets3.jpg'不應該是'tets2.jpg'嗎? – ghenghy

回答

2

嘗試這種方式:

SELECT t1.*, t3.NAME 
FROM objectTable AS t1 
INNER JOIN (
    SELECT OBJECT_ID, MIN(PHOTO_ID) AS PHOTO_ID 
    FROM photo_table 
    GROUP BY OBJECT_ID 
) t2 ON t1.ID = t2.OBJECT_ID 
INNER JOIN photo_table AS t3 ON t3.OBJECT_ID = t2.OBJECT_ID AND 
           t3.PHOTO_ID = t2.PHOTO_ID 

訣竅是使用派生表,用於選擇每OBJECT_IDPHOTO_ID值。此值用於額外加入photo_table,以便選擇所需的NAME值。

0

要我按照你的代碼,我會改變對DESC ASC並下令其ID列,以獲得最低的ID

select * 
from objectTable 
inner join photo_table 
    on photo_table.OBJECT_ID = (select OBJECT_ID 
           from photo_table 
           where photo_table.OBJECT_ID = objectTable.ID 
           order by photo_table.PHOTO_ID ASC 
           limit 1).