2009-12-04 3 views
1

У меня есть запрос, как это:получить первый ряд объединения

select t1.id, t1.sample, t2.id from table t1 join table t2 
on t1.sample = t2.sample and t2.id > t1.id 

Мне нужно, чтобы получить первую строку, которая удовлетворяет второе условие.

Любая идея?

+1

Первая строка основана на том, что именно? Вы не заказываете свой результирующий набор. –

+0

Я думаю, что это поможет, если вы предложите образцы данных в двух таблицах и пример того, какой результат вы ожидаете. Я не понимаю, что вы имеете в виду в своих других комментариях. «Для всех идентификаторов я должен взять первый идентификатор, удовлетворяющий условию». –

ответ

1

Хорошо.

Вы можете попробовать это: , если вы работаете с SQL Server, добавить верхнюю 1

, если вы работаете с MySQL, добавьте предел 1

он будет возвращать только первый ряд.

Для того, чтобы добавить предложение, вы также можете добавить предложение.

+0

Он использует Oracle DB. –

3
SELECT t1.id, t1.sample, t2.id FROM table t1 JOIN TABLE t2 
ON t1.sample = t2.sample AND t2.id > t1.id WHERE ROWNUM = 1 
+0

В этой технике есть уловка. Если SELECT содержит предложение ORDER BY, WHERE ROWNUM = 1 будет выполняться перед ORDER BY. В этом случае поместите весь SELECT (минус условие WHERE ROWNUM = 1) в подзапрос, затем SELECT * FROM (ваш подзапрос) WHERE ROWNUM = 1. Да, он запутан, но иногда это Oracle. –

+0

с rownum = 1 работает, но мне нужно извлечь все id, а не только одно. –

+0

Разве вы не сказали, что хотите получить первую строку, удовлетворяющую вашему состоянию? –

1

Все строки возвращаемый удовлетворяют обоим условиям, так что вам не нужно делать ничего особенного, чтобы убедиться, что второе условие выполнено.

Если вы хотите ограничить размер возвращаемых результатов до 1, добавьте WHERE ROWNUM = 1 в запрос, если он будет запущен на Oracle.

+0

Да, но для всех id я должен взять первый id, удовлетворяющий условию>, с rownum = 1 возвращается только первая строка. –

+0

Я не уверен, что понимаю проблему; все возвращаемые идентификаторы удовлетворяют условию>. Вы ищете самый большой t2.id в дополнение к t2.id> t1.id? –

0

Oracle использует нечто, называемое «ROWNUM». Ограничение количества результатов вызывает раздражающее противоречие между СУБД.

SELECT t1.id, t1.sample, t2.id 
FROM table t1 join table t2 
ON t1.sample = t2.sample and t2.id > t1.id 
WHERE ROWNUM <= 1 
0

Если вы хотите наималейший t2.id, которая удовлетворяет второе условие, то

select * from (select t1.id, t1.sample, t2.id from table t1 join table t2
on t1.sample = t2.sample and t2.id > t1.id order by t2.id) where rownum =1

Если вы хотите наибольший t2.id, которая удовлетворяет второе условие, то

select * from (select t1.id, t1.sample, t2.id from table t1 join table t2
on t1.sample = t2.sample and t2.id > t1.id order by t2.id desc) where rownum =1

Смежные вопросы