MySql在几个regs上离开了

时间:2010-04-05 20:59:14

标签: mysql left-join

我有这个表1

idproduct(PK) | date_to_go
1               2010-01-18
2               2010-02-01
3               2010-02-21
4               2010-02-03

以及控制date_to_go更新的另一个table2

id | idproduct(FK) | prev_date_to_go | date_to_go | update_date
1    1               2010-01-01        2010-01-05   2009-12-01
2    1               2010-01-05        2010-01-10   2009-12-20
3    1               2010-01-10        2010-01-18   2009-12-20
4    3               2010-01-20        2010-02-03   2010-01-05

因此,在本例中,对于table1.idproduct#1 2010-01-18是实际的date_to_go和2010-01-01(table2.prev_date_to_go,第一个reg)是原始的date_to_go。

使用此查询

select v.idproduct, v.date_to_go, p.prev_date_to_go original_date_to_go 
from table1 v 
left join produto_datas p on p.idproduto = v.idproduto
group by (v.idproduto)
order by v.idproduto

我可以假设original_date_to_go将是table2的第一个相关注册表吗?

idproduct | date_to_go | original_date_to_go 
1           2010-01-18   2010-01-01
2           2010-02-01   NULL
3           2010-02-21   2010-01-20 
4           2010-02-03   NULL 

2 个答案:

答案 0 :(得分:1)

不,您不能假设您将始终从第一行获得prev_date_to_go的值。当您选择未在GROUP BY中列出的列时,您可以获取的值可以是任何行中的值。有关更多信息,请参阅MySQL文档GROUP BY and HAVING with Hidden Columns

  

使用此功能时,每个组中的所有行应与GROUP BY部分中省略的列具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。

答案 1 :(得分:0)

好吧,我使用了一个子查询。

select v.idproduct, v.date_to_go,  (select p.prev_date_to_go from table2 p where p.idproduct=v.idproduct order by idtable2 asc limit 1)  original_date_to_go from table1 v group by (v.idproduct) order by v.idproduct