2011-04-13 45 views
4
---------- 
samples 
---------- 
SamplesID 
stylenumber 
stylename 
status 

----------- 
samples_details 
----------- 
Samples_Details_ID 
SamplesID 
CustomerName 
date_out 
date_returned 
updated (timestamp) 
status 

------------ 
samples_pictures 
------------ 
SamplesPicID 
SamplesID 

samplesからのすべての行、samples_picturesからのすべての一致(ある場合)、およびsamples_detailsからの最新のレコード(存在する場合)を与えるクエリを書き込もうとしています。したがって、2つの外部結合は残っていますが、最新のレコードのみを取得します。働いていない何左外部結合のMAX条件

は:

SELECT samples.* 
    , samples_pictures.SamplesPicID 
    , CustomerName 
    , date_out 
    , date_returned 
    , updated 
    , samples_details.status as txn_status 
FROM samples 
    LEFT OUTER JOIN 
     (SELECT Samples_Details_ID 
      , samples_details.status as txn_status 
      , MAX(updated) as MaxUpdated 
     FROM samples_details 
     GROUP BY Samples_Details_ID 
    ) AS MaxTable 
     ON MaxTable.SamplesID = samples.SamplesID 
    LEFT OUTER JOIN samples_pictures 
     ON samples.SamplesID = samples_pictures.SamplesID 

どのような援助をいただければ幸いです!

+0

逆MaxTable.SamplesIDとsamples.samplesId? – Mikeb

答えて

1

MaxTableのSELECT文にはSamplesIDはありません。次のようになります。

SELECT samples.*, samples_pictures.SamplesPicID, CustomerName, date_out, 
date_returned, updated, samples_details.status as txn_status 
FROM samples 
    LEFT OUTER JOIN (SELECT SamplesID, Samples_Details_ID, samples_details.status as txn_status, 
    MAX(updated) as MaxUpdated FROM samples_details GROUP BY Samples_Details_ID) 
    AS MaxTable ON MaxTable.SamplesID = samples.SamplesID 
LEFT OUTER JOIN samples_pictures ON samples.SamplesID = samples_pictures.SamplesID 
1

あなたの元のクエリはまだsamples_detailsからレコードを選択します。

最大タイムスタンプを持つレコードのみをフィルターに掛けて、これをsample_details表と結合して追加列を取得するためには、副選択を作成する必要があります。

SELECT * 
FROM  samples s 
     LEFT OUTER JOIN sample_details sd ON sd.SamplesID = s.SamplesID 
     INNER JOIN (
      SELECT SamplesID 
        , MAX(update) AS Update 
      FROM  samples_details 
      GROUP BY 
        SamplesID 
     ) sdm ON sdm.SamplesID = sd.SamplesID 
     LEFT OUTER JOIN samples_pictures sp ON sp.SamplesID = s.SamplesID 
+0

パーフェクト、@ Lievenと@dgillandの両方に感謝します。 – TjJunior

+0

@TjJunior、答えが正しい場合は、そのような印をつけて、ボランティアに賞品を贈呈してほしい。両方の答えが正しいとすれば(あなたが言っているように)、最初に「dgilland」と答えました。 accepected答えは彼に行くべきです。 –

0
SELECT samples.* 
    , samples_pictures.SamplesPicID 
    , CustomerName 
    , date_out 
    , date_returned 
    , updated 
    , txn_status 
FROM samples 
    LEFT OUTER JOIN 
     (SELECT Samples_ID 
      , status as txn_status 
     FROM samples_details 
      INNER JOIN 
       (SELECT Samples_ID, 
         Samples_Details_ID 
        , MAX(updated) as MaxUpdated 
       FROM samples_details 
       GROUP BY Samples_ID, Samples_Details_ID 
      ) AS MaxTable 
       ON MaxTable.Samples_ID = samples.SamplesID 
       AND MaxTable.Samples_Details_ID = samples.Samples_Details_ID 
    ) AS MaxJoin 
    LEFT OUTER JOIN samples_pictures 
     ON samples.SamplesID = samples_pictures.SamplesID 
1
SELECT samples.* 
    , samples_pictures.SamplesPicID 
    , CustomerName 
    , date_out 
    , date_returned 
    , updated 
    , samples_details.status as txn_status 
FROM samples 
    LEFT OUTER JOIN samples_details 
     ON samples.SamplesID = samples_details.SamplesID 
     AND samples_details.updated = 
     (SELECT MAX(updated) 
     FROM samples_details 
      WHERE SamplesID = samples.SamplesID) 
    ) 
    LEFT OUTER JOIN samples_pictures 
     ON samples.SamplesID = samples_pictures.SamplesID 
+0

私は時間と時間を節約しました:)大丈夫かもしれない10分...しかし、これは私がやろうとしていたものに比べてずっとスマートです!ありがとう –

関連する問題