我有兩個表,我想Possession在Table1dayStartDay和EndDayof之間更新列Table2。
表格1
| 公司編號 | 日 | 組 ID | 擁有 |
|---|---|---|---|
| 99 | 1 | 1 | 0 |
| 99 | 1 | 2 | 0 |
| 99 | 2 | 1 | 0 |
| 99 | 2 | 2 | 0 |
| 99 | 3 | 1 | 0 |
| 99 | 3 | 2 | 0 |
| 99 | 4 | 1 | 0 |
| 99 | 4 | 2 | 0 |
| 99 | 5 | 1 | 0 |
| 99 | 5 | 2 | 0 |
| 99 | 6 | 1 | 0 |
| 99 | 6 | 2 | 0 |
| 99 | 7 | 1 | 0 |
| 99 | 7 | 2 | 0 |
| 99 | 8 | 1 | 0 |
| 99 | 8 | 2 | 0 |
| 99 | 9 | 1 | 0 |
| 99 | 9 | 2 | 0 |
| 99 | 10 | 1 | 0 |
| 99 | 10 | 2 | 0 |
表2
| 公司編號 | 組 ID | 開始日 | 結束日 |
|---|---|---|---|
| 99 | 1 | 1 | 3 |
| 99 | 2 | 4 | 5 |
| 99 | 1 | 6 | 7 |
| 99 | 2 | 8 | 10 |
這是我寫的更新陳述句,但Table1只更新Table2. 我需要它為Table2.
UPDATE Table1
SET Table1.Possession =
CASE
WHEN a.Day BETWEEN b.StartDay AND b.EndDay
AND a.GroupId = b.GroupId
THEN 1
ELSE 0
END
FROM Table1 a
INNER JOIN Table2 b ON a.CompanyId = b.CompanyId
這是我想要的結果
| 公司編號 | 日 | 組 ID | 擁有 |
|---|---|---|---|
| 99 | 1 | 1 | 1 |
| 99 | 1 | 2 | 0 |
| 99 | 2 | 1 | 1 |
| 99 | 2 | 2 | 0 |
| 99 | 3 | 1 | 1 |
| 99 | 3 | 2 | 0 |
| 99 | 4 | 1 | 0 |
| 99 | 4 | 2 | 1 |
| 99 | 5 | 1 | 0 |
| 99 | 5 | 2 | 1 |
| 99 | 6 | 1 | 1 |
| 99 | 6 | 2 | 0 |
| 99 | 7 | 1 | 1 |
| 99 | 7 | 2 | 0 |
| 99 | 8 | 1 | 0 |
| 99 | 8 | 2 | 1 |
| 99 | 9 | 1 | 0 |
| 99 | 9 | 2 | 1 |
| 99 | 10 | 1 | 0 |
| 99 | 10 | 2 | 1 |
uj5u.com熱心網友回復:
您的連接條件不正確,來自的每一行都a與 的每一行匹配,b因此您將每行更新a4 次,應該使用 4 中的哪一個?
您可以對所有條件使用外連接,但最好使用exists
Update a
set a.possession=
case when exists (
select * from table2 b
where b.CompanyId=a.companyId
and b.groupId=a.groupId
and a.day between b.startday and b.endday
) then 1 else 0 end
from
table1 a;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/402649.html
標籤:
