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;
我在 mysql table1 和 table2
中有两个 tabletable1 有以下字段
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;