如果它小于表B,则从表B中选择行。比较表A的列col1

时间:2019-12-22 09:08:54

标签: mysql

表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

现在,我想从日期2019-12-22到小于最大值

的表B中获取可用的广告位

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

ID  Slot         Max slot
2   Noon          5
4   Night         5

谢谢

2 个答案:

答案 0 :(得分:2)

您将需要在这里进行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中找到更多信息。

答案 1 :(得分:0)

我认为您也许可以从CTE中受益:

WITH slot_counts (slot_id, slot_count)
  AS (SELECT slotid, count(*) FROM `tableA` WHERE `date` = '2019-12-22' GROUP BY slotid)
SELECT *
  FROM `tableB`, slot_counts
 WHERE `max slot` < slot_counts.slot_count
   AND tableB.slot = slot_counts.slot_id;