我有 2 張桌子,一張叫做“Booking”,另一張叫做“Assignments”,這兩張桌子之間沒有關系
“預訂”表包含“資源”、“開始日期”、“結束日期”、“小時”列
“分配”表包含列“資源”、“開始日期”、“結束日期”、“小時”
“預訂”表行是每日記錄,意味著開始和結束日期將始終相同,小時數將小于 8(一天的作業時間)
“分配”表行可以是多天記錄,表示開始日期和結束日期可以相同或不同,例如開始日期 01-02-2022 和結束日期 03-02-2022,小時數可以是 24 小時(每天最多 8 小時) )
現在我必須找到 "Resource" 的所有預訂行,它們在特定日期和時間沒有等效的分配行
可能存在復雜的情況,其中“2022 年 1 月 2 日”的“資源 a”的預訂時間為“8 小時”,但同一日期和資源的分配行只有 6 小時,所以我也需要找到那些缺失的時間.
最快和最有效的方法是什么?記錄可以是數百萬,首選編程語言是 C#,如果 C# 不能讓我在 Max 30 分鐘內處理所有這些,也歡迎使用其他方法,例如將這兩個表存盤在 SQL 資料庫中并在其上運行查詢,在第三張桌子上得到結果
謝謝你的幫助
uj5u.com熱心網友回復:
我會使用后端來做這樣的程序。每個表上的校驗和索引將是有效的。首先創建 Booking 和 Assignment 表。
添加校驗和:
ALTER TABLE Booking
ADD Booking_Checksum AS CHECKSUM( [Resource] ,[start date], [end date], [hours]) PERSISTED;
ALTER TABLE Assignment
ADD Assignment_Checksum AS CHECKSUM( [Resource] ,[start date], [end date], [hours]) PERSISTED;
添加索引:
CREATE NONCLUSTERED INDEX [IX_Booking_Checksum] ON [dbo].[Booking]
( Booking_Checksum ASC )
CREATE NONCLUSTERED INDEX [IX_Assignment_Checksum] ON [dbo].[Assignment]
( Assignment_Checksum ASC )
全部在預訂但不是分配:
Select b.*
From Booking b
left join Assignment a on b.Booking_Checksum = a.Assignment_Checksum
where a.Assignment_Checksum is null
全部在分配中,但不在預訂中:
Select a.*
From Assignment a
left join Booking b on b.Booking_Checksum = a.Assignment_Checksum
where b.Booking_Checksum is null
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452555.html
下一篇:使用聯合的SQL連接
