Оператор SQL в ClearQuest вызывает ORA-00907: отсутствует правая скобка
Я пытаюсь извлечь данные из ClearQuest, на котором запущена база данных Oracle за симпатичным интерфейсом на основе Eclipse. Используя встроенный построитель запросов, я не могу ограничить объем предоставляемых данных настолько, чтобы я мог добраться туда, куда я хочу.
Моя цель: я хочу извлечь данные из двух таблиц. Таблица 2 имеет отношение многие к одному с таблицей 1. При извлечении данных из базы данных я хочу извлечь самую последнюю запись из таблицы 2, которая имеет отношение к указанному набору записей в таблице 1.
Моя попытка: я начал писать простой запрос, который использовал второй выбор, чтобы получить последнюю запись из Таблицы 2. Я не могу установить сервер оракула на моей машине, и поэтому мне пришлось попробовать запрос в mysql и настроить его для оракула. Это запрос:
select t1.id, t1.name, t2.set_date
from test_table t1, link_table t2
where t2.test_id = t1.id
and t2.set_date = (select set_date
from link_table
where t1.id = test_id
order by set_date desc
limit 1)
and t1.state = 'Closed';
Запуск этого в MySQL работает отлично! Изменение запроса в соответствии со стандартами Oracle дает мне это;
SELECT t1.id,t1.name,t2.set_date
FROM test_table t1,link_table t2
WHERE t2.test_id = t1.id
AND t2.set_date = (SELECT set_date
FROM link_table
WHERE t1.id = test_id
AND ROWNUM = 1
ORDER BY set_date DESC)
AND t1.state = 'Closed';
Который при тестировании, чтобы запустить его через Oracle Formatter (например, Instant SQL Formatter), он проходит нормально. Но при вводе запроса в ClearQuest для извлечения данных выдает ошибку; ORA-00907: missing right parenthesis
,
Я пытался изменить это все утро и не могу заставить его работать. Что мне не хватает?
2 ответа
Вы можете попробовать следующий код:- Производительность увеличивается с помощью аналитического запроса по сравнению с вложенным запросом.
select t1.id,t1.name,t2.set_date
FROM test_table t1,(select * from (select set_date,test_id,row_number() over (partition by test_id order by set_date desc ) rn from link_table) where rn =1) t2
WHERE t2.test_id = t1.id AND t1.state = 'Closed';
Я не мог проверить то же самое. Пожалуйста, вернитесь в случае возникновения проблем
Я не думаю, что номер строки может быть рассчитан до тех пор, пока не будет обработан заказ. Таким образом, он не доступен на этом уровне в рамках дополнительного выбора. Однако если вы используете псевдоним sub select и добавляете where rownum = 1 к внешнему выражению where, оно должно работать.