在 insert-select 块中使用 if-else 条件
Using if-else condition inside a insert-select block
我有两个 tables elig(mID, startDate, endDate) 和 claim(mID, serviceDate)。我必须检查 serviceDate 是否在 startDate 和 endDate 之间,然后插入一个新的 table hasClaim(mID,startDate,endDate,Flag)。如果满足条件,则标志将设置为 'Y',否则设置为 'N'。
我所做的是:
INSERT INTO hasClaim (mID, startDate, endDate, has_claim)
SELECT e.mID, e.startDate, e.endDate, 'Y'
FROM elig e
inner JOIN claim c
ON e.mID=c.mID
WHERE c.serviceDate BETWEEN e.startDate AND e.endDate
但这仅 returns serviceDate 在 startDate 和 endDate 之间且标志设置为 'Y' 的那些值。如何同时检索其他值并将标志设置为 'N'?
我正在使用甲骨文。
尝试:
INSERT INTO hasClaim (mID, startDate, endDate, has_claim)
SELECT e.mID,
e.startDate,
e.endDate,
CASE
WHEN c.serviceDate BETWEEN e.startDate AND e.endDate
THEN 'Y'
ELSE 'N'
END AS has_claim
FROM elig e
inner JOIN claim c
ON e.mID=c.mID;
这使用 searched case 语句(来自 10g 文档,但在 11g 中是相同的)。
我有两个 tables elig(mID, startDate, endDate) 和 claim(mID, serviceDate)。我必须检查 serviceDate 是否在 startDate 和 endDate 之间,然后插入一个新的 table hasClaim(mID,startDate,endDate,Flag)。如果满足条件,则标志将设置为 'Y',否则设置为 'N'。 我所做的是:
INSERT INTO hasClaim (mID, startDate, endDate, has_claim)
SELECT e.mID, e.startDate, e.endDate, 'Y'
FROM elig e
inner JOIN claim c
ON e.mID=c.mID
WHERE c.serviceDate BETWEEN e.startDate AND e.endDate
但这仅 returns serviceDate 在 startDate 和 endDate 之间且标志设置为 'Y' 的那些值。如何同时检索其他值并将标志设置为 'N'? 我正在使用甲骨文。
尝试:
INSERT INTO hasClaim (mID, startDate, endDate, has_claim)
SELECT e.mID,
e.startDate,
e.endDate,
CASE
WHEN c.serviceDate BETWEEN e.startDate AND e.endDate
THEN 'Y'
ELSE 'N'
END AS has_claim
FROM elig e
inner JOIN claim c
ON e.mID=c.mID;
这使用 searched case 语句(来自 10g 文档,但在 11g 中是相同的)。