簡體   English   中英

如果表 B 小於表 B 列 col1 比較表 A,則從表 B 中選擇行

[英]Select rows from table B if it is less than Table B Column col1 comparing Table A

表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月 22 日從表 B 獲得可用插槽並且小於 Max

結果將類似於表 B(插槽)

ID  Slot         Max slot
2   Noon          5
4   Night         5

謝謝

您將需要一個 LEFT JOIN 在這里和 GROUP BY 表 B 行。 然后 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        |

在 DB Fiddle 上查看

注意:根據您的服務器版本、設置和鍵,您可能需要在 GROUP BY 子句中包含表 B 中的所有列。

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

您將在文檔中找到更多信息。

我認為您可能會從 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM