表A

UHID    SlotID       Date
111      1          2019-12-22
222      1          2019-12-22
333      3          2019-12-22
444      1          2019-12-22
555      2          2019-11-25
666      3          2019-12-22


表B(插槽)

ID  Slot         Max slot
1   Morning       3
2   Noon          5
3   Evening       2
4   Night         5


现在我想从表B中获取日期2019-12-22且小于最大值的可用广告位

结果看起来像
表B(插槽)

ID  Slot         Max slot
2   Noon          5
4   Night         5


谢谢

最佳答案

您将在此处需要一个LEFT JOIN并在表B行中使用GROUP BY。然后,COUNT条件进入HAVING子句。

select b.*
from table_b b
left join table_a a
  on  a.SlotID = b.ID
  and a.Date = '2019-12-22'
group by b.ID
having count(a.SlotID) < b.Max_slot


结果:

| ID  | Slot  | Max_slot |
| --- | ----- | -------- |
| 2   | Noon  | 5        |
| 4   | Night | 5        |


View on DB Fiddle

注意:根据您的服务器版本,设置和键,您可能需要在GROUP BY子句中包含表B中的所有列。

group by b.ID, b.Slot, b.Max_slot


您将在docs中找到更多信息。

关于mysql - 如果表B中的行小于表B,则从表B中选择行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59442921/

10-10 22:08