2011-01-24 167 views
8

我有一個數據庫表,記錄用戶在遊戲中的移動。每次他們移動時,我都會記錄他們的用戶ID,move_index(每行增加)以及他們所在區域的ID。我有一個特殊的move_index值-1,表示該用戶的最後一次移動。選擇結果的選擇

id user_id move_index zone_id 
---------------------------------------------------------------- 
0 11  0   0 
1 11  1   0 
2 11  2   0 
3 11  -1   3  

4 22  0   0 
5 22  1   1 
6 22  2   1  
7 22  -1   3  

我想要做的兩件事情與SQL:

  • 檢測所有誰開始並在特定區域完成(如開始在0區和區完成3)
  • 擴展用戶上面,檢測所有在特定區域中開始和結束並通過特定區域的用戶。

我知道如何做到這一點與多個SQL語句& java - 但我不知道如何在單個SQL語句中做到這一點。我需要做一個選擇,然後選擇這個選擇的結果嗎?

回答

10

您可以簡單地執行SUBQUERY以在「單個」查詢中實現此目的。

例如爲:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

從本質上說,你正在使用的「內部」選擇爲工作數據集的「外部」選擇的結果。

+0

謝謝 - 我從這裏算出來的。這是標準的SQL(即它是否也適用於Oracle?)。而且,除了性能問題之外,您是否可以對SUBQUERIES的數量進行限制? – Kevin 2011-01-24 10:56:30

0
select distinct user_id from table where (move_index=0 and zone_id=0) and (move_index=-1 and zone_id=3) 
0

這裏去查詢:

SELECT *, (foo = true AND bar = true) as foobar 
FROM foo 
WHERE (id = 3) 

您可以使用您的查詢結果中的foobar的值,以確定第二個方程的結果。

我認爲,這應該給你一個關於如何去做的提示。