我有3张桌子。每次我上传文件时,表1都会更新。表2是一个档案表,在所有上载的文件中存储记录。表3经过一些验证后存储了表2的数据。
第一次上传文件:
表1:
RefNo | Code | ID
--------+----------+-----
1234 30 1
5678 40 2
表2:
RefNo | Code | ID
--------+----------+------
1234 30 1
5678 40 2
第二次上传文件
表1:
RefNo | Code | ID
--------+----------+-----
1234 50 3
5678 60 4
表2:
RefNo | Code | ID
--------+----------+------
1234 30 1
5678 40 2
1234 50 3
5678 60 4
上传第3个文件(refno = 1234,更新代码= 100)
表1:
RefNo | Code | ID
--------+----------+------
1234 100 5
表2:
RefNo | Code | ID
--------+----------+------
1234 30 1
5678 40 2
1234 50 3
5678 60 4
1234 100 5
现在,表2中有3条记录用于1234。仅在最后一次上传的代码为0时,我才想将表3中的代码更新为100。如何选择最后一次上传的记录?
SELECT *
FROM table2 a
JOIN table 1 b ON a.refno = b.refno
WHERE a.id = (SELECT ???)
我不知道如何选择ID = 3(最后上传的ID)而不是多个ID。
答案 0 :(得分:0)
如果id是int类型,则可以使用它来获取table2中存在的table1中所有refno的最后一条记录。然后,您可以根据需要过滤这些内容:
select t2.*
from table2 t2
join (
select t2.RefNo,
MAX(t2.ID) lastId
from table2 t2
JOIN table1 t1 ON t2.RefNo = t1.RefNo
WHERE t2.Id < t1.Id
GROUP BY t2.RefNo
) ti on t2.Id = ti.lastId