2009-12-04 66 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

第一行的基礎是什麼?你不要給你的結果集排序。 – 2009-12-04 20:05:59

+0

我認爲如果您在兩個表格中提供示例數據並且提供您期望的輸出示例,這將有所幫助。我不是在你的其他評論中遵循你的意思。「對於所有的ID我必須採取滿足條件的第一個ID」。 – 2009-12-05 05:36:29

回答

1

好吧。

你可以試試這個:如果你使用SQL Server工作 , 加頂1

,如果你使用MySQL,添加限制1

它只會返回第一個行。

爲了確保您可以添加訂單條款。

+0

他正在使用Oracle數據庫。 – 2009-12-05 05:37:30

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有時也是如此。 – 2009-12-04 18:11:11

+0

與rownum = 1的作品,但我需要提取所有的身份證,而不是隻有一個。 – 2009-12-04 18:21:58

+0

你不是說你想讓第一排滿足你的條件嗎? – 2009-12-04 19:17:54

1

返回的所有行將滿足這兩個條件,所以您不必做任何特殊的事情來確保第二個條件得到滿足。

如果要將返回的結果大小限制爲1,則在查詢是否將在Oracle上運行時追加WHERE ROWNUM = 1

+0

是的,但對於所有的id我必須採取第一個id滿足>條件,與rownum = 1只有第一行返回。 – 2009-12-04 18:24:13

+0

我不確定我是否理解這個問題;所有返回的ids都會滿足條件。你是否正在尋找除了t2.id> t1.id之外最大的t2.id? – 2009-12-05 07:18:04

0

Oracle使用一種叫做「ROWNUM」的東西。限制結果的數量在DBMS中令人生厭地不一致。

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