插入到特定类别中不存在的位置
Insert Into where not exists from specific category
我有一个 table,其中包含多个维修类别,以及与每个维修类别关联的项目。我正在尝试将尚不存在的特定维修类别中的所有标准项目插入到详细信息 table 中。
TblEstimateDetails 是 Estimate Table 和 StandardItem Table 的联接 table。 TblCategoryItems 是维修类别及其各自标准项目的联接 table。
例如在附图中,左侧是维修类别中的所有标准项目,右侧是 EstimateDetails table 中已经存在的所有标准项目。
Standard Items All vs Already Included
我需要能够从左侧插入 6 个缺失的 GUID,并插入右侧的 table,并且仅针对特定的估计 GID。
这是在 Access VBA 脚本中使用的,我会在 sql 语法正确后将其转换为适当的代码。
谢谢!
INSERT INTO TblEstimateDetails(estimate_GID, standard_item_GID)
SELECT
'55DEEE29-7B79-4830-909C-E59E831F4297' AS estimate_GID
, standard_item_GID
FROM TblCategoryItems
WHERE repair_category_GID = '32A8AE6D-A512-4868-8E1A-EF0357AB100E'
AND NOT EXISTS
(SELECT standard_item_GID
FROM TblEstimateDetails
WHERE estimate_GID = '55DEEE29-7B79-4830-909C-E59E831F4297');
一些尝试:1) 简化为 select 查询以查看它是否 select 是正确的记录,2) 使用 NOT IN 语句而不是 NOT EXISTS。没有理由 NOT EXISTS 不工作,如果它不工作我会尝试不同的方式。
SELECT '55DEEE29-7B79-4830-909C-E59E831F4297' AS estimate_GID,
standard_item_GID
FROM TblCategoryItems
WHERE repair_category_GID = '32A8AE6D-A512-4868-8E1A-EF0357AB100E'
AND standard_item_GID NOT IN
(SELECT standard_item_GID FROM TblEstimateDetails
WHERE estimate_GID = '55DEEE29-7B79-4830-909C-E59E831F4297');
明白了。 Access 需要子查询与主查询相关联才能工作。所以我将子查询中的 WHERE 子句设置为等于主查询中的匹配列。而且我必须加入 Estimates table 以便它只选择特定估计中的项目。
SELECT
'06A2E0A9-9AE5-4073-A856-1CCE6D9C48BB' AS estimate_GID
, CI.standard_item_GID
FROM TblCategoryItems CI
INNER JOIN TblEstimates E ON CI.repair_category_GID=E.repair_category_GID
WHERE E.repair_category_GID = '15238097-305E-4456-B86F-3787C9B8219B'
AND NOT EXISTS
(SELECT ED.standard_item_GID
FROM TblEstimateDetails ED
WHERE E.estimate_GID=ED.estimate_GID
);
我有一个 table,其中包含多个维修类别,以及与每个维修类别关联的项目。我正在尝试将尚不存在的特定维修类别中的所有标准项目插入到详细信息 table 中。
TblEstimateDetails 是 Estimate Table 和 StandardItem Table 的联接 table。 TblCategoryItems 是维修类别及其各自标准项目的联接 table。
例如在附图中,左侧是维修类别中的所有标准项目,右侧是 EstimateDetails table 中已经存在的所有标准项目。
Standard Items All vs Already Included
我需要能够从左侧插入 6 个缺失的 GUID,并插入右侧的 table,并且仅针对特定的估计 GID。
这是在 Access VBA 脚本中使用的,我会在 sql 语法正确后将其转换为适当的代码。
谢谢!
INSERT INTO TblEstimateDetails(estimate_GID, standard_item_GID)
SELECT
'55DEEE29-7B79-4830-909C-E59E831F4297' AS estimate_GID
, standard_item_GID
FROM TblCategoryItems
WHERE repair_category_GID = '32A8AE6D-A512-4868-8E1A-EF0357AB100E'
AND NOT EXISTS
(SELECT standard_item_GID
FROM TblEstimateDetails
WHERE estimate_GID = '55DEEE29-7B79-4830-909C-E59E831F4297');
一些尝试:1) 简化为 select 查询以查看它是否 select 是正确的记录,2) 使用 NOT IN 语句而不是 NOT EXISTS。没有理由 NOT EXISTS 不工作,如果它不工作我会尝试不同的方式。
SELECT '55DEEE29-7B79-4830-909C-E59E831F4297' AS estimate_GID,
standard_item_GID
FROM TblCategoryItems
WHERE repair_category_GID = '32A8AE6D-A512-4868-8E1A-EF0357AB100E'
AND standard_item_GID NOT IN
(SELECT standard_item_GID FROM TblEstimateDetails
WHERE estimate_GID = '55DEEE29-7B79-4830-909C-E59E831F4297');
明白了。 Access 需要子查询与主查询相关联才能工作。所以我将子查询中的 WHERE 子句设置为等于主查询中的匹配列。而且我必须加入 Estimates table 以便它只选择特定估计中的项目。
SELECT
'06A2E0A9-9AE5-4073-A856-1CCE6D9C48BB' AS estimate_GID
, CI.standard_item_GID
FROM TblCategoryItems CI
INNER JOIN TblEstimates E ON CI.repair_category_GID=E.repair_category_GID
WHERE E.repair_category_GID = '15238097-305E-4456-B86F-3787C9B8219B'
AND NOT EXISTS
(SELECT ED.standard_item_GID
FROM TblEstimateDetails ED
WHERE E.estimate_GID=ED.estimate_GID
);