最も内側の結果の最新バージョンのみを返す必要があるという制約により、複数の値を返す必要があるサブクエリを内部結合に変換するのに多くの問題があります。さまざまな回答を検索して閲覧しようとしましたが、修正が見つかりません。以下は少し単純化されていますが、私が望むものを示しており、まったく機能しません:
select
works.id as w_id,works.name as w_name,author,publisher,
(select name as auth from creators where author=id),
(select name as pub from creators where publisher=id),
(select version,
(select pages,uploaded,uri from info where id=workupdates.info)
from workupdates where work=works.id order by date desc limit 1)
from works
(情報はリビジョン間で変更されないことがよくありますが、ほとんどのドキュメントには少なくともいくつかあります。) 列ごとに 1 つずつ、複数のサブクエリを使用できますが、それは遅くてばかげています。
素朴に、私はそれを次のように翻訳しました:
select
works.id as w_id,works.name as w_name,developer,publisher,
(select name as dev from creators where developer=id),
(select name as pub from creators where publisher=id),
version,pages,uploaded,uri
from
works
left join workupdates on workupdates.work = works.id
left join info on info.id=workupdates.info
しかし、明らかに、各作業の最新の情報データのみが必要な場合、一致する各情報行に対して 1 つずつ、各作業に対して複数の結果が返されます。
次のように始まることを示唆する1つの回答を見ましfrom (select max(date) from workupdates where workupdates.work = works.id) wu inner join works
たが、私の場合、DBクレームworks.idが存在しないという壊れたクエリが表示されました。私は多くの異なるバリエーションを見て試してきました - 私は、これほど多くの同様のクエリがこれほど異なる構造になるとは思いもしませんでした - しかし、私はまだ運がなく、私の脳はかなり混乱しています.