2016-08-14 18 views
0

我有四个表。第一个描述了一些项目的组合。第二个是组合和项目之间的链接表。第三个是项目表,第四个包含批次信息 - 批号,以及该批次何时开始使用。MySQL加入和最新的很多信息

混合

mixID | mixName 
---------------- 
1  | Foxtrot 
2  | Romeo 

mixLink

mixID | itemID 
---------------- 
1  | 1 
1  | 2 
1  | 3 

项目

itemID| itemName 
---------------- 
1  | square 
2  | triangle 
3  | hexagon 

itemLo TS

itemID| lotNo | startDate 
------------------------- 
1  | 22/5/3| 22/07/16 
2  | 03/5 | 25/07/16 
2  | 04/19 | 12/08/16 
3  | 15/0 | 05/08/16 

现在,我需要能够从数据库中获取的信息,详细介绍从混音中的所有项目,以及最近使用的批号,是这样的:

itemName | lotNo 
---------------- 
square | 22/5/3 
triangle | 04/19 
hexagon | 15/0 

我已经尝试了十几种混合的连接,分组的,maxes,子查询和havings;一切都无济于事。任何帮助将非常感谢,我一直拉着我的头发几个小时,我觉得我的指甲只是在解决方案刮!

+1

的可能的复制[MySQL的内部联接MAX](http://stackoverflow.com/questions/29336064/mysql-inner-join-max) –

+0

和日期使用日期数据类型存储? – Strawberry

回答

0

这会给你你想要的结果,并且如果你的索引正确地完成,它将表现得相当好。我不确定你是如何参考mix的意思,因为它在你的示例输出中并不明显,但我已将它包含在WHERE条款中,因此希望你能理解你将在哪里使用它。

SELECT i.itemName 
, (SELECT il.lotNo FROM itemLots il 
WHERE il.itemID=i.itemID 
ORDER BY il.startDate desc 
LIMIT 1) as lotNo 
FROM item i 
JOIN mixLink ml ON ml.itemID=i.itemID 
JOIN mix m ON m.mixID=ml.mixID 
WHERE m.mixName="Foxtrot"; 
+0

此外,这是假设你实际上不需要做一个'JOIN',这是一个常见的错误 – tomb