php mysql 使用左外连接

php mysql with left outer join

我在 mysql table1 和 table2

中有两个 table

table1 有以下字段

Field               Type    

intProjectId        int(11)         
intSourceId     int(11)     
intClientId         int(11)     
varProject      varchar(200)    
fltAmount            float              
varAmountType varchar(50)   
dtStart              date       
dtEnd                date   

和table2有以下字段

    Field                                   Type

intPercentageId                     int(11)     
intProjectId                        int(11)         
floatPaymentpercentage              float   
ddDate                              datetime

将两个 table 加入共同项目 id.If table2 没有包含特定项目 ID 的记录,它可以作为 null 加入。

Table 1 有项目数据 Table 2 有它的完成百分比。 (每个项目有多个记录。) 项目 ID -- 公共字段

我使用了以下查询

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId
GROUP BY table1.varProject ORDER BY table2.intPercentageId DESC

这里我得到的输出是百分比 table returns 每个项目的第一条记录。我需要 table 2 的最后插入记录。

table1 ==> 项目编号 5 在 table 2 中,项目 ID 5 有 3 条记录。我想获取 table2 中的最后一条记录。现在它 returns 来自 table 2

的第一条记录

如何更改查询。请帮我解决这个问题。

试试这个

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId
GROUP BY table1.varProject HAVING MAX(table2.intPercentageId)

"Order By" 在 "Group by" 完成后运行,这就是它没有给出预期结果的原因。我建议的更改将使第 2 table 行的百分比最高,根据场景应该是项目的最后一行。

计算table2中每个项目的最大记录,并使用该信息获取最新记录。这是一个使用 group by:

的方法
select t1.*
from table1 t1 join
     table2 t2
     on t1.intProjectId = t2.intProjectId join
     (select t2.intProjectId, max(intPercentageId) as maxpi
      from table2 t2
      group by t2.intProjectId
     ) tt2
     on t2.intProjectId = tt2.maxpi;

计算表 2 中每个项目的最大记录,并使用该信息获取最新记录。这是一个使用分组依据的方法:

select t1.*
 from table1 t1 join
 table2 t2
 on t1.intProjectId = t2.intProjectId join
 (select t2.intProjectId, max(intPercentageId) as maxpi
  from table2 t2
  group by t2.intProjectId
 ) tt2
 on t2.intProjectId = tt2.maxpi;