优化我的SQL查询仅显示在表上出现两次或更多次的人

问题描述 投票:0回答:2

我正在尝试编写一个SQL查询“查找在不同日期多次预订过一个房间的客人的预订”。

我有一个带有qazxsw点表的postgres数据库

guests

以及列出所有预订的hotel7=# SELECT * FROM guest; guest_id | name | phone | email ----------+---------+--------------+--------------- 1 | kat | 111-111-1111 | [email protected] 2 | andy | 222-222-2222 | [email protected] 3 | theda | 333-333-3333 | [email protected] 4 | forrest | 444-444-4444 | [email protected] 5 | trent | 555-555-5555 | [email protected] 6 | cyle | 666-666-6666 | [email protected] (6 rows) 表。

reservation

还有一些其他表对问题似乎没有必要。

到目前为止,我得到的最接近的是

hotel7=# SELECT * FROM reservation;
 res_id | guest_id |  check_in  | check_out  
--------+----------+------------+------------
  1 |        1 | 2017-12-01 | 2017-12-03
  2 |        1 | 2017-12-05 | 2017-12-07
  3 |        2 | 2017-12-01 | 2017-12-02
  4 |        2 | 2017-12-01 | 2017-12-10
  5 |        3 | 2017-12-01 | 2017-12-10
  6 |        4 | 2017-12-15 | 2017-12-30
  7 |        5 | 2017-12-15 | 2017-12-22
(7 rows)

我只需要展示列表中出现两次的人。

sql postgresql
2个回答
1
投票

你可以试试这个:

hotel7=# SELECT g.name FROM guest AS g  
LEFT JOIN reservation AS r
ON r.guest_id = g.guest_id;
  name   
---------
 kat
 kat
 andy
 andy
 theda
 forrest
 trent
 cyle
(8 rows)

对于每个SELECT A.guest_id, A.name FROM guest A LEFT JOIN reservation B ON A.guest_id = B.guest_id GROUP BY A.guest_id, A.name HAVING COUNT(res_id) > 1; ,它将计算表guest_idres_id条件中存在多少(非NULL)reservation,您可以确保只获得具有多个保留的那些。

如果有像HAVING这样的字段,您可以在查询中使用booking_date查看预订是否由同一个人在两个不同的日期进行,但您只有登记入住和退房日期。


0
投票

请试试这个

SELECT g.name FROM guest AS g LEFT JOIN预订AS r ON r.guest_id = g.guest_id,COUNT(guest_id)> 1;

© www.soinside.com 2019 - 2024. All rights reserved.