如何从子查询中插入字段。代码如下。我想在每个策略上添加最大孩子的出生日期。我得到一个错误,说我不能将空值插入目标表。我试图修改列以接受空值,但也不起作用。如果您有任何其他想法来将此插入目标表,我将非常感谢您的帮助!
Insert into JOURNEY_1A t (oldestchild_dob)
select A.oldestchild_dob
FROM
(
select DISTINCT T.POLICY_ID, max( M.ME_BIRTH_DATE) AS OLDESTCHILD_DOB
from JOURNEY_1A t, ALL_MTH S, member M
WHERE T.POLICY_ID = S.POLICY_ID
AND S.MONTH_ID = (SELECT MAX(MONTH_ID) FROM ALL_MTH )
AND S.MEMBER_ID = M.MEMBER_ID
AND trunc((to_date(sysdate)-m.me_birth_date)/365.25) BETWEEN 0 AND 17
AND M.ME_BIRTH_DATE IS NOT NULL
group by t.policy_id
) A
JOIN JOURNEY_1A T
ON A.POLICY_ID = T.POLICY_ID
;
字符串
1条答案
按热度按时间uqdfh47h1#
您似乎想要一个相关的
UPDATE
,而不是INSERT
,因为您试图修改(更新)现有行中的值,而不是创建(插入)新行。字符串
M.ME_BIRTH_DATE IS NOT NULL
过滤器是不必要的,因为你已经测试了M.ME_BIRTH_DATE
是在过去的18年,不能是NULL
,如果它匹配该过滤器。*ADD_MONTHS
从今天减去18岁,并将其作为边界(或使用MONTHS_BETWEEN
)。您的代码不起作用,因为
INSERT
将尝试插入一个新行(它不会将新值插入到现有行中),并且因为您只指定了一个列,那么数据库将对该行的所有其他列使用默认值。如果您没有指定默认值,那么将使用NULL
。这意味着:
型
是相同的:
型
这可能会被解决为:
型
而
NULL
值问题是针对所有未指定的列,而不是针对指定的一列。如果你确实想
INSERT
一个新行,那么你需要为表中的所有其他列指定值(除非你想让它们成为默认值,可能是NULL
)。