如何使用group by order和limit连接两个表

时间:2014-08-13 06:35:36

标签: mysql sql join

我有两张桌子

tblXYZ

patId | Name |  DOB
---------------------------
 1    | xyz  |  10-05-1986
 2    | abc  |   12-06-01978
 3    | lmn  |   12-04-1975

tblABC

apptId | patId | status   | otherinfo
-------------------------------------
  1    |  1    |   single | jmdfh
  2    |  1    |   sds    | dfdf  
  3    |  2    |   fdf    | sdwed  
  4    |  2    |   fdf    | sdwed

我想加入这两个表来获得结果:

结果

patId | apptId | Name   |  DOB
--------------------------------
  1   |   2    | single |  jmdfh
  2   |   4    |  sds   |  dfdf  
  3   |  null  |  fdf   |  sdwed 

apptId应该是tblABC

中最后输入的值

3 个答案:

答案 0 :(得分:0)

尝试类似的东西

select patId, apptId, Name, DOB
join -- or left join if you want patId that doesn't have match in the second table
(
  select patId AS patIdBis, max(apptId) AS apptId 
  from tblABC group by patId
)
on patId = patIdBis
order by patId;

答案 1 :(得分:0)

如果通过“最后输入”表示最大的apptId,则以下查询将执行您想要的操作。

SELECT tblXYZ.patId, tblABC.apptId, tblXYZ.name, tblXYZ.DOB
FROM tblXYZ
     LEFT JOIN
     (
         (SELECT patId, MAX(apptId) mx FROM tblABC GROUP BY patId) maxes
         INNER JOIN tblABC
         ON maxes.patId = tblABC.patId AND maxes.mx = tblABC.apptId
     ) ON tblXYZ.patId = tblABC.patId;

更新:Valentin Clement的查询更短,如果你只需要来自tblABC的apptId,那就更好了。如果您需要来自tblABC的任何其他数据,那么您需要使用我的答案中的查询。

答案 2 :(得分:0)

使用此查询获取结果

SELECT x.patid, a.apptid, x.name, x.dob 
FROM tblxyz x INNER JOIN tblabc a ON 
x.patid=a.patid

patid apptid  name  DOB
1     1       xyz   1986-10-05 00:00:00.000
1     2       xyz   1986-10-05 00:00:00.000
2     3       abc   1978-12-06 00:00:00.000
2     4       abc   1978-12-06 00:00:00.000