Хорошо, поэтому я собираю путь, чтобы выбрать ревизию конкретного романа:
SELECT Catalog.WbsId, Catalog.Revision, NovelRevision.Revision
FROM Catalog, BookInCatalog
INNER JOIN NovelMaster
INNER JOIN HasNovelRevision
INNER JOIN NovelRevision
ON HasNovelRevision.right = NovelRevision.obid
ON HasNovelRevision.Left=NovelMaster.obid
ON NovelMaster.obid = BookInCatalog.Right
WHERE Catalog.obid = BookInCatalog.Left;
Возвращает все ревизии, которые есть в мастере романов, для каждого мастера романов, которые есть в каталоге.
Проблема в том, что я хочу только ПЕРВОЙ ревизии каждого нового мастера в каталоге. Как мне это сделать? Да, и кстати: мой вкус sql затруднен, как и многие другие, в том, что он не поддерживает функцию LIMIT.
**** UPDATE ****
Таким образом, используя ответ 1 в качестве руководства, я обновил свой запрос до следующего:
SELECT Catalog.wbsid
FROM Catalog, BookInCatalog, NovelVersion old, NovelMaster, HasNovelRevision
LEFT JOIN NovelVersion newRevs
ON old.revision < newRevs.revision AND HasNovelRevision.right = newRevs.obid
LEFT JOIN HasNovelRevision NewerHasNovelRevision
ON NewerHasNovelRevision.right = newRevs.obid
LEFT JOIN NovelMaster NewTecMst
ON NewerHasNovelRevision.left = NewTecMst.obid
WHERE Catalog.programName = 'E18' AND Catalog.obid = BookInCatalog.Left
AND BookInCatalog.right = NewTecMst.obid AND newRevs.obid = null
ORDER BY newRevs.documentname;
Я получаю сообщение об ошибке в четвертой строке:
"old". "Revision": неверный идентификатор
РЕШЕНИЕ
Ну, мне пришлось перейти на другой форум, но я получил рабочее решение:
select nr1.title, nr1.revision
from novelrevision nr1
where nr1.revision in (select min(revision) from novelrevision nr2
where nr1.title = nr2.title)
Таким образом, это решение использует JOIN, упомянутый OA, вместе с ключевым словом IN, чтобы сопоставить его с ревизией.