Выберите группу записей за раз, основываясь на том, что они имеют одинаковое значение в определенном столбце
Я хочу иметь возможность использовать один запрос, чтобы выбрать все записи из таблицы, имеющие одинаковое значение в определенном столбце.
осветление
Условия: - document_id не является первичным ключом.
Идентификаторы списка = SELECT DISTINCT T.document_id ОТ таблицы T;
Блок списка = SELECT * из таблицы, где document_id = ids.next();
- выполнить операцию на блоке, затем извлечь следующий блок
Может ли кто-нибудь сказать мне, как преобразовать эти два запроса в один запрос?
ОБНОВИТЬ
@Marco @StephanB очень жаль, что мой вопрос был настолько смелым... я должен научиться быть более конкретным...
Во всяком случае, я использую JAVA и Apache Turbine с Torque. Вот код, который я хочу изменить:
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();
}
}
Я хочу добавить еще одно поле (DataEntryQueuePeer.DOCUMENT_ID) в критерии, чтобы в каждом "doSelect" были выбраны только записи с одинаковым document_id. Никакой определенный DOCUMENT_ID не передается методу, хотя.
пожалуйста, дайте мне знать, если я все еще не достаточно ясно... спасибо.
1 ответ
Ваш SQL искажен. Правильный вопрос, скорее всего, получить правильный ответ. Я назову ваши таблицы А и Б.
SELECT * FROM B WHERE B.document_id IN (SELECT DISTINCT A.document_id FROM A)