我有一些代码值表包含一个代码和一个Long ID的描述。Oracle插入通过从多个表中选择,其中一个表可能没有一行
我现在要创建引用了一些代码的帐户类型的条目,所以我有这样的事情:
insert into account_type_standard (account_type_Standard_id,
tax_status_id, recipient_id)
(select account_type_standard_seq.nextval,
ts.tax_status_id, r.recipient_id
from tax_status ts, recipient r
where ts.tax_status_code = ?
and r.recipient_code = ?)
这从如果匹配tax_status和收件人表中检索相应的值被找到他们各自的代码。不幸的是,recipient_code是可空的,因此?替代值可能为空。当然,隐式联接不会返回一行,所以行不会插入到我的表中。
我试过使用NVL吗?和r.recipient_id。
我试过在r.recipient_code =上强制外连接?通过添加(+),但它不是明确的连接,所以Oracle仍然没有添加另一行。
任何人都知道这样做的方式?
我明显可以修改语句,以便从外部查找recipient_id,并且有一个?而不是r.recipient_id,并且不要从收件人表中选择,但我宁愿在1个SQL语句中执行所有这些操作。
会不会这有一个问题是,在tax_status或收件人中有多个条目,以及NULL收件人会发生什么情况ient_code? – 2008-09-25 04:55:49
刚刚尝试过,并且account_type_standard上的recipient_id列的null收件人代码的结果为null。 不知道多个条目,但在我的情况下,表具有唯一的代码,所以我没事。 – Mikezx6r 2008-09-25 12:39:03
根据托尼安德鲁斯,不需要从DUAL中选择序列值。可以只有account_type_standard_seq.nextval。 – Mikezx6r 2008-09-26 12:22:23