表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/