【发布时间】:2011-09-23 06:40:47
【问题描述】:
我有两个表 STR_IndentDetail 和 PUR_POIndent
STR_IndentDetail:
IndentID ItemID POQty D1 D2 D3 RD
--------- ------- ------ ---- --- --- ---
2 1 NULL 10 20 30 NULL
2 6 NULL 20 40 60 45
PUR_PO缩进:
POID IndentID ItemID Quantity D1 D2 D3 RD
------ ---------- ------ ---------- ---- --- --- ---
2 2 1 55 10 20 30 NULL
2 2 6 100 20 40 60 45
我想用 PUR_POIndent 表 Quantity 更新 STR_IndentDetail 表 POQty。 我写了两个基于 INNER JOIN 和 LEFT OUTER 的更新语句。但是这两个查询都只更新了一行在 D1、D2、D3 和 RD 列中具有值的行。 包含具有 NULL 值的 RD 列的行没有得到更新。如何为这种情况编写更新语句。以下是我的两个更新声明。
基于内连接:
UPDATE STR_IndentDetail
SET
POQty = PUR_POIndent.Quantity
FROM
PUR_POIndent
WHERE
PUR_POIndent.IndentID = STR_IndentDetail.IndentID AND
PUR_POIndent.ItemID = STR_IndentDetail.ItemID AND
PUR_POIndent.D1 = STR_IndentDetail.D1 AND
PUR_POIndent.D2 = STR_IndentDetail.D2 AND
PUR_POIndent.D3 = STR_IndentDetail.D3 AND
PUR_POIndent.RD = STR_IndentDetail.RD
AND PUR_POIndent.POID = 2
基于左连接:
UPDATE STR_IndentDetail
SET
POQty = PUR_POIndent.Quantity
FROM
STR_IndentDetail LEFT OUTER JOIN PUR_POIndent ON
PUR_POIndent.IndentID = STR_IndentDetail.IndentID AND
PUR_POIndent.ItemID = STR_IndentDetail.ItemID AND
PUR_POIndent.D1 = STR_IndentDetail.D1 AND
PUR_POIndent.D2 = STR_IndentDetail.D2 AND
PUR_POIndent.D3 = STR_IndentDetail.D3 AND
PUR_POIndent.RD = STR_IndentDetail.RD WHERE
PUR_POIndent.POID = 2
两个查询都忽略 RD 值为 NULL 的行。 我想更新这两行。这个怎么做?请有任何建议。
【问题讨论】:
-
但如果空值超过 1 行,那么如何比较 RD 的值。这会给你错误的信息。
-
PUR_POIndent 表派生自 STR_IndentDetail。所以 PUR_POIndent 表包含与 STR_IndentDetail 相同的记录
标签: sql sql-server sql-server-2008 sql-server-2005 sql-update