2016-05-12 99 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).