2011-03-05 35 views
2

我必須從包含每行(稱爲id_value)的唯一標識的表(例如A)讀取一組行。如何從SQL中的兩個表中獲取匹配的行,而不需要從java重複調用

現在使用這個id_value我必須從另一個表(例如B)獲取行。

我使用的Java,所以我的代碼是:

ResultSet rs= [ Code to get rows from table A ] ; 

while(rs.next()) 
{ 
ResultSet rs2= [Code to get rows from table B using the id_value from table A using rs.getString("id_value");]; 
} 

上面的查詢,如果ofcourse作爲慢行數可以在表A的時間超過500

有誰知道一個更好和快速的解決這個問題或如何在單個查詢中做到這一點?

+3

使用JOIN查詢。 – 2011-03-05 04:50:38

+0

它在SQL中稱爲JOIN。 – 2011-03-05 04:50:53

回答

3

你應該閱讀了關於SQL連接:http://en.wikipedia.org/wiki/Join_(SQL

你想要做的東西沿着這些路線:

SELECT a.value_1, a.value_2, b.value_1, b.value_2 
FROM table_a AS a 
LEFT JOIN table_b AS b 
ON a.id_value = b.table_a_id 
WHERE a.value_1 = "something" 

它不過,如果你有實際的疑問,會更容易幫助你。

+0

不是老式'TableA,TableB'連接語法的粉絲。只有一些你不能用它做的事情,你可以使用顯式的ansi-92連接,而對於有多個表的複雜查詢,它的可讀性要差得多。 – 2011-03-05 04:56:20

+0

@Joel:你說得對。我想我已經習以爲常了。固定。 – 2011-03-05 04:58:39

+0

但是如何從結果集中讀取數據? 由於我正在運行的內部內部查詢來自不同的表,並且對於表A中的每一行,表B中有一個或多個數據,如何從每個唯一的id_value的結果集中讀取數據? – 2011-03-05 05:03:05

1

你可以使用左連接:

SELECT table1.*, table2.* from table1 
    LEFT JOIN table2 ON table2.id = table1.table2id 
    WHERE table1.ID = 123; 
+0

謝謝喬爾。我現在正在使用左外連接,它已經真正解決了這個問題。 – 2011-03-05 07:18:54

+0

@Joel - 我看到了修訂版,它使我感到驚訝? – Orbit 2011-03-05 07:20:56

+1

您的列名單中包含* .table1,* .table2,這只是倒退而不起作用。也有可能table1和table2都有自己的ID列 - 表中的外鍵列不太可能被命名爲「id」。 – 2011-03-05 07:24:32

相關問題