2011-11-24 101 views
0

我希望能夠使用單個查詢從特定列中具有相同值的表中選擇所有記錄。根據特定列中具有相同值的記錄一次選擇一組記錄

澄清

條件: - DOCUMENT_ID是不是主鍵。

List ids = SELECT DISTINCT T.document_id FROM table T;

List block = SELECT * from table where document_id = ids.next();

  • 塊上執行操作,然後檢索下一個塊

誰能告訴我如何在這兩個查詢轉換成一個單一的查詢?

UPDATE

@Marco @StephanB真的很抱歉,我的問題是這樣vauge ...我應該學會更具體...

反正,我使用JAVA和Apache與渦輪扭矩。 這裏,我想改變的代碼:

public void runQueue (String username, Customer customer) { 
    Criteria c = new Criteria(); 
    c.add(DataEntryQueuePeer.CUSTOMER_ID, customer.getId());//DataEntryQueue.CUSTOMER_ID is not the primary key 
    c.add(DataEntryQueuePeer.STATUS, DataEntryQueue.STATUS_IN_KEYING); 
    c.add(DataEntryQueuePeer.DATA_ENTRY_USERID, username); 
    c.add(DataEntryQueuePeer.QUEUE_TYPE, Constants.CUSTOMER_QUEUE); 

    List<DataEntryQueue> v = DataEntryQueuePeer.doSelect(c); 
    if(v.size() > 0) { 
     //do something with v 
     v.setStatus(DataEntryQueue.STATUS_KEYING_COMPLETE); 
     v.setModified(true); 
     v.save(); 
    } 
} 

我想在這樣只有具有相同DOCUMENT_ID記錄在每一個「的doSelect」選擇的標準添加一個字段(DataEntryQueuePeer.DOCUMENT_ID)。雖然沒有具體的DOCUMENT_ID傳遞給該方法。

請讓我知道如果我還不夠清楚......謝謝。

+0

如何在檢索下一個塊之前對查詢塊執行操作?您需要一個存儲過程IMO。在你的代碼中執行起來難嗎?你使用哪種語言? – Marco

+2

所以每一行都指向你需要閱讀的下一行?我相信你的數據庫設計是有缺陷的 - 對你的問題可能沒有可接受的解決方案。如果你解釋你將要在你的項目中做什麼,我們可能會建議一個更好的設計。 –

回答

0

您的SQL格式錯誤。一個正確的問題更有可能找回正確的答案。我將命名您的表A和B.

SELECT * FROM B WHERE B.document_id IN (SELECT DISTINCT A.document_id FROM A) 
+0

由格式不正確,你的意思是我在這兩個查詢中有相同的表名?如果是這樣,那就是我所要求的。沒有A和B表,但只有A.我想你的解決方案在兩個表之間工作。任何想法使它在同一張桌子上工作? 謝謝! –

相關問題