0

以前の質問へのコメントには、 「こちらの回答も参照することをお勧めします: stackoverflow.com/questions/1313120/…</a>。受け入れた回答は、技術的に正しいと考えられていましたが、実際には非常に非効率的である可能性があります。 MySQL は相関サブクエリを好みません。」

私が受け入れた回答の SQl はSQL fiddle にあります。参照されている質問は、LEFT JOIN と INNER JOIN を比較しています。SQL Fddle は JOIN< のみを使用しますが、これはデフォルトで INNER JOIN になると理解しています。

では、LFT JOIN を使用するようにクエリを書き直すにはどうすればよいでしょうか。

4

1 に答える 1

2

mysql でのパフォーマンスについては確信が持てませんが、位置を失格にする行に対して LEFT JOIN を実行し、WHERE を使用して LEFT JOIN が一致しなかったレコードのみを選択できます。

SELECT v.id
     , v.description
     , v.type
     , p.time_stamp
     , p.latitude
     , p.longitude
  FROM positions p
  JOIN vehicles v ON v.id = p.id
  LEFT JOIN positions l ON l.id = p.id 
                        AND l.time_stamp > p.time_stamp
  WHERE l.id IS NULL

または、SQLFiddle で: http://sqlfiddle.com/#!2/2e994/31/0

于 2013-10-07T03:23:48.783 に答える