2014-10-10 3 views
0

У меня есть следующие PostgreSQL запрос, который выбирает несколько полей из таблицы называется statement_bank:Postgresql - возвращаемые результаты, если значение поля существует в другой таблице

SELECT statement_id, statement_value FROM statement_bank WHERE category_id=6 AND level=7 

У меня есть еще одна таблица называется statement_records и поля для этого таблицы:

date | user_id | statement_id 

Как только инструкция используется для определенного user_id, statement_id записывается в таблицу statement_records. Это может быть записано несколько раз для разных пользователей.

Я ищу, чтобы запустить первый запрос, чтобы он возвращал только оператор statement_id из таблицы statement_bank, если он существует в таблице statement_records между определенной датой, например. между 01-01-2013 И 01-01-2014

Любые предложения о том, как я могу это достичь?

Thanks

+0

Как насчет использования JOIN? – mreiterer

ответ

1

Я думаю, что вы просто хотите, чтобы существовало условие. На основании предоставленной информации, она будет выглядеть примерно так:

SELECT statement_id, statement_value 
FROM statement_bank sr 
WHERE category_id=6 AND level=7 and 
     exists (select 1 
       from statement_record sr 
       where sr.user_id = sb.user_id and 
        sr.statement_id = sb.statement_id and 
        sr.date between '2013-01-01' and '2013-12-31' 
      ); 

Примечание: Я предполагаю, что вы действительно не хотите матчи на 2014-01-01, но только до конца 2013 года

+0

Спасибо, что Гордон. Где sr.user_id = sb.user_id, у меня нет user_id в таблице statement_bank, таблица просто содержит уникальные утверждения, которые затем могут применяться к числу пользователей, поэтому причина, по которой оператор_ид может существовать несколько раз в таблице statement_record. Должен ли я просто удалить строку, которая читает sr.user_id = sb.user_id? будет дублировать существование statement_id в таблице statement_records, вызывая проблему? – John

Смежные вопросы