2016-08-14 8 views
0

私は4つのテーブルを持っています。最初はアイテムの組み合わせを記述します。 2番目は、ミックスとアイテムの間のリンクテーブルです。 3番目はアイテムテーブルで、4番目のアイテムはロット情報 - ロット番号とそのロットが使用開始される時刻を保持します。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 

私はジョイン、グループ別、マックス、サブクエリ、および持てるもののダースミックスを試しました。すべて無駄に。どんな助けでも大歓迎です、私は何時間も私の髪を引っ張ってきました。私の爪はちょうどその解決策を手にしているような気がします!

+1

可能な重複[mysqlの内側の参加最大](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

関連する問題