Postgresql - 如果另一个表中存在字段值,则返回结果

时间:2014-10-10 08:17:30

标签: sql postgresql select

我有以下postgresql查询,它从名为statement_bank的表中选择几个字段:

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_bank表中的statement_id,如果它存在于特定日期之间的statement_records表中,例如在01-01-2013和01-01-2014之间

关于如何实现这一目标的任何建议?

由于

1 个答案:

答案 0 :(得分:1)

我想你只想要一个exists子句。根据您提供的信息,它看起来像:

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年底。