我有两个表,一个主表和一个通用信息表。我需要从常规表更新我的主表。当常规信息表的描述值略有不同时,如何更新主表?
主
+------+---------+
| Code | Desc |
+------+---------+
| 156 | Milk |
| 122 | Eggs |
| 123 | Diapers |
+------+---------+
信息
+------+---------------+--------+
| Code | Desc | Price |
+------+---------------+--------+
| 156 | Milk | $3.00 |
| 122 | Eggs | $2.00 |
| 123 | Diapers | $15.00 |
| 124 | Shopright Cola| $2.00 |
| 124 | SR Cola | $2.00 |
+------+---------------+--------+
如您所见,项目124有2个描述。无论哪种描述都无关紧要。
我的尝试是使用两个代码返回124,我理解我的代码正在查找主文件中的唯一代码和描述,这就是为什么它返回124但我不确定如何修复它。
INSERT INTO MASTER
(
SELECT UNIQUE(Code), Desc FROM INFO A
WHERE NOT EXISTS
(SELECT Code FROM MASTER B
WHERE A.Code = B.Code )
);
我也尝试过:
INSERT INTO MASTER
(
SELECT UNIQUE(PROC_CDE), Desc FROM FIR_CLAIM_DETAIL A
WHERE Code NOT IN
(SELECT Code FROM FIR_CODE_PROC_CDE_MSTR B
WHERE A.Code = B.Code )
);
答案 0 :(得分:1)
独特过滤所有列中SELECTed
结果集中的重复条目,而不仅仅是一个键。
如果要提取已过滤的密钥的其他属性,则必须指示数据库首先对唯一密钥进行分组。要选择分组键的属性之一,我们可以使用AGGREGATE
函数。与MAX()
,MIN()
一样。
INSERT INTO MASTER
(
SELECT PROC_CDE, MAX(Desc) FROM FIR_CLAIM_DETAIL A
WHERE Code NOT IN
(SELECT Code FROM FIR_CODE_PROC_CDE_MSTR B
WHERE A.Code = B.Code )
GROUP BY PROC_CDE
);
有analytical functions可以用于复杂的要求。