Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQLite内部联接限制1_Mysql_Sql_Sqlite - Fatal编程技术网

Mysql SQLite内部联接限制1

Mysql SQLite内部联接限制1,mysql,sql,sqlite,Mysql,Sql,Sqlite,我有两个表objectTable和photo\u table。下面是来自objectTable ID TEXT 1 Kaunas 2 Vilnius 3 Palanga 4 Prienai OBJECT_ID PHOTO_ID NAME 1 7 tets7.jpg 1 8 tets8.jpg 1 9 tets9.jpg 1 10 tets10.jpg 1

我有两个表
objectTable
photo\u table
。下面是来自
objectTable

ID  TEXT
1   Kaunas
2   Vilnius
3   Palanga
4   Prienai
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
下面是来自
photo\u表的数据

ID  TEXT
1   Kaunas
2   Vilnius
3   Palanga
4   Prienai
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
正如你所看到的,一个物体可以有很多图案。我需要得到evety对象的第一张图片(我的输出应该是)

我的问题是:

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个小时来解释为什么这个查询不起作用。我错过了什么?我的逻辑正确吗?

请尝试以下方法:

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
诀窍是使用派生表来选择每个
对象ID
照片ID
值。此值用于对
photo\u表的附加联接,以便选择所需的
名称
值。

请尝试以下方法:

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

诀窍是使用派生表来选择每个
对象ID
照片ID
值。此值用于
photo_table
的附加联接中,以便选择所需的
名称
值。

根据您的代码,我将更改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).

按照你的代码,我将更改ASC的DESC和订购它的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).

您的示例输出没有意义。您说您希望获得每个对象的第一张图片,但图片“第一”的原因是什么?对于示例输出中的第二个结果,照片的顺序必须与其他按升序排序的照片的顺序相反。您确定“tets3.jpg”不应该是“tets2.jpg”吗?您的示例输出没有意义。您说您希望获得每个对象的第一张图片,但图片“第一”的原因是什么?对于示例输出中的第二个结果,照片的顺序必须与其他按升序排序的照片的顺序相反。你确定“tets3.jpg”不应该是“tets2.jpg”吗?