如何查找特定ID是否具有特定值的记录?

时间:2018-02-12 20:18:10

标签: mysql

假设我们有一个表booking,其中peopleid可以有多个预订。找到至少预订active的人的最佳方式是什么?其他预订值为cancelledclosed

我在想这个,但我觉得必须有一个更有效的方法:

select a.peopleid
     , sum(case status.status_desc when 'active' then 1 else 0 end) as counted
  from booking a
 inner join people
    on a.peopleid = people.peopleid
 inner join status
   on a.statusid = status.statusid
group by a.personid

我计划对此进行left join以获得一个简单的yesno指标,以确定一个人是否至少有一个有效预订

预订金额为bookingid|statusid|peopleid,1人可以预订多次

4 个答案:

答案 0 :(得分:1)

如果您只是想找到至少有一个有效预订的人,只需执行一个简单的JOIN并将所需状态放在WHERE子句中。

SELECT DISTINCT a.peopleid
FROM booking AS b
JOIN status AS s ON b.statusid = s.statusid
WHERE s.status_desc = 'active'

没有必要加入people(除非您想获得有关此人的其他信息,但问题中未显示)。而且没有必要计算比赛数;如果没有符合status_desc = 'active'条件的行,则JOIN不会返回这些行。当有人有多次预订时,SELECT DISTINCT会删除重复项。

答案 1 :(得分:1)

您可以使用EXiSTS检查哪个用户至少有一个符合条件的预订。

select p.peopleid
from   people p
where  exists (select 1
               from   booking b
               join   status  s
               where  b.peopleid = p.peopleid
                      s.statusid = b.statusid
               and    s.status_desc = 'active');

答案 2 :(得分:0)

只需将count与WHERE子句一起使用。

PrintOut

答案 3 :(得分:0)

为什么不进行简单的加入:

select p.* from people p
join booking b on b.peopleid  = a.peopleid 
join status on status.statusid = b.statusid
where status.status_desc = 'active'

如果您不需要来自其他人的任何其他信息,例如他们的姓名,地址..那么您可以跳过人员表并从预订表中获取ID。