2011-11-24 90 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.我想你的解决方案在两个表之间工作。任何想法使它在同一张桌子上工作? 谢谢! –

相关问题