Mysql 如果表B列col1小于表A,则从表B中选择行
表A 表B插槽Mysql 如果表B列col1小于表A,则从表B中选择行,mysql,Mysql,表A 表B插槽 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 ID Slot Max sl
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
ID Slot Max slot
1 Morning 3
2 Noon 5
3 Evening 2
4 Night 5
现在我想从表B中获得2019-12-22日期的可用插槽,并且小于最大值
结果看起来像
表B插槽
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
ID Slot Max slot
1 Morning 3
2 Noon 5
3 Evening 2
4 Night 5
谢谢我认为您可能会从CTE中受益:
ID Slot Max slot
2 Noon 5
4 Night 5
我认为您可能会从CTE中受益:
ID Slot Max slot
2 Noon 5
4 Night 5
这里需要一个左连接,并按表B行分组。然后,COUNT条件转到HAVING子句
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;
注意:根据您的服务器版本、设置和键,您可能需要在GROUPBY子句中包含表B中的所有列
| ID | Slot | Max_slot |
| --- | ----- | -------- |
| 2 | Noon | 5 |
| 4 | Night | 5 |
您将在中找到更多信息。您需要在此处使用左连接,并按表B行分组。然后,COUNT条件转到HAVING子句
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;
注意:根据您的服务器版本、设置和键,您可能需要在GROUPBY子句中包含表B中的所有列
| ID | Slot | Max_slot |
| --- | ----- | -------- |
| 2 | Noon | 5 |
| 4 | Night | 5 |
您将在中找到更多信息。继续。试试看,继续。尝试一些您忘记添加表槽计数的内容。。。从表B中,插槽计数。您忘记添加表插槽计数。。。从表B中,插槽_计数。