1

我有一个这样的查询

select c.travelandsmile_id, c.name, c.surname
from customer c
where c.travelandsmile_id in
      (
        select s.travelandsmile_id
        from spent_kilometers s
        group by travelandsmile_id
        having count(s.kilometers)=1
      )

我想选择在表中只显示一次spent_kilometers并且公里数大于 30 的记录。但是当我添加时where s.kilometers > 30,结果是错误的,并且根据第一个查询出现了更多元组。

我怎样才能做到这一点?

4

2 回答 2

1
select travelandsmile_id, c.name, c.surname
from
    customer c
    inner join
    spent_kilometers s using (travelandsmile_id)
where s.kilometers > 30
group by travelandsmile_id, c.name, c.surname
having count(*) = 1
于 2013-04-13T00:11:35.303 回答
0

如果我正确阅读了问题,您希望找到所有拥有一条记录spent_kilometers并且该记录必须具有约束的客户s.kilometers > 30

这可以通过以下 SQL 来完成。

select c.travelandsmile_id, c.name, c.surname
from customer c
where c.travelandsmile_id in 
     ( /* find all customers that have only one record in spent_kilometers */
        select c.travelandsmile_id
        from spent_kilometers s
        group by travelandsmile_id having count(travelandsmile_id) = 1
    )
 and c.travelandsmile_id in 
     ( /* find all customers that have s.kilometers > 30 */
        select c.travelandsmile_id
        from spent_kilometers s
        where s.kilometers > 30
    );
于 2013-04-13T00:14:52.403 回答