У меня есть база данных PostgreSQL-9.0.x, которая управляет средой автоматического тестирования.Существует множество таблиц, которые содержат различные статические данные (версии ОС, имена тестов и т. Д.) С именами «buildlist» и «osversmap».Однако есть также две таблицы, которые содержат данные, которые часто меняются.Первая - это «ожидающая» таблица, которая фактически представляет собой очередь тестов, где ожидающие тесты выбираются тестовыми системами самостоятельно, а затем удаляются после завершения тестового прогона.Вторая - это таблица «Результаты», которая содержит результаты испытаний по мере их производства (в процессе и завершено).
Записи в ожидающей таблице имеют отношение один ко многим с записями в таблице результатов (каждая ожидающая строка может содержать 0 или более строк в результатах).Например, если ни в одной из тестовых систем не было самостоятельного назначения ожидающей строки, в результатах будет нулевое число связанных строк, а затем после назначения ожидающей строки число строк в результатах будет увеличиваться для каждой ожидающей строки.Еще одна особенность заключается в том, что мне всегда нужна только самая новая строка таблицы результатов, связанная с каждой ожидающей строкой таблицы.Что мне нужно сделать, это запросить «ожидающую» таблицу для ожидающих тестов, а затем также получить «logurl» из таблицы результатов, которая соответствует каждой строке ожидающей таблицы.
Все это довольно похоже на этопроблема, за исключением того, что у меня есть дополнительное бремя двух дополнительных таблиц со статическими данными (buildlist & osversmap): PHP / SQL: используя только один запрос, ВЫБРАТЬ строки из двух таблиц, если данные находятся в обеих таблицах, или простоВЫБЕРИТЕ из одной таблицы, если нет
Я спотыкаюсь о том, как интегрировать эти две таблицы со статическими данными в запрос.Следующий запрос работает нормально, если в таблице «результатов» есть хотя бы одна строка, соответствующая каждой строке в таблице ожидания (однако он ничего не возвращает для строк, которые существуют только в «ожидании», но еще не в'результаты'):
SELECT
pending.cl,
pending.id,
pending.buildid,
pending.build_type,
pending.active,
pending.submittracker,
pending.os,pending.arch,
pending.osversion,
pending.branch,
pending.comment,
osversmap.osname,
buildlist.buildname,
results.logurl
FROM pending ,osversmap ,buildlist ,results
WHERE
pending.buildid=buildlist.id
AND pending.os=osversmap.os
AND pending.osversion=osversmap.osversion
AND pending.owner='$owner'
AND pending.completed='f'
AND results.hostname=pending.active
AND results.submittracker=pending.submittracker
AND pending.cl=results.cl
AND results.current_status!='PASSED'
AND results.current_status NOT LIKE '%FAILED'
ORDER BY pending.submittracker,pending.branch,pending.os,pending.arch
спасибо заранее!