이렇게하면 하루 종일 저의 머리를 긁적 거릴 수 있습니다. 계산 된 필드를 사용하여 조인하려는 여러 쿼리가 있습니다. 이 첫 번째 쿼리는 MS Access 디자인보기가 작동하지 않는 것을 제외하고는 의도 한대로 실행됩니다. SQL 뷰에서 편집 할 수 있기 때문에 큰 문제는 아닙니다.작업 쿼리의 약간의 변경으로 인해 JOIN 오류가 발생합니다.
SELECT PM_qryBOM_1.parentid AS LVL0,
PM_qryBOM_1.childid AS LVL1,
[PM_qryBOM_1].[parent_part_no] & "/" & [PM_qryBOM_1].[child_part_no] AS BOM_Address,
PM_qryBOM_1.qty,
[PM_qryBOM_1].[parentid] & "/" & [PM_qryBOM_1].[childid] AS BOM_ID,
sol_avgcost.avgcost_material,
sol_avgcost.avgcost_labor,
sol_avgcost.avgcost_sub,
cm_qrypndj_avg.avgofunit_hrs,
PM_qryBOM_1.parentid AS Parent_BOM_ID,
PM_qryBOM_1.parent_part_no AS Parent_BOM_Address,
pm_qrybom_lvl1_costroll.mult
FROM (((pm_qrybom AS PM_qryBOM_1
LEFT JOIN pm_qrybom AS PM_qryBOM_t
ON PM_qryBOM_1.parentid = PM_qryBOM_t.childid)
LEFT JOIN sol_avgcost
ON PM_qryBOM_1.child_part_no = sol_avgcost.part_no)
LEFT JOIN cm_qrypndj_avg
ON PM_qryBOM_1.child_part_no = cm_qrypndj_avg.part_no)
LEFT JOIN pm_qrybom_lvl1_costroll
ON [PM_qryBOM_1].[parentid] & "/" & [PM_qryBOM_1].[childid] =
pm_qrybom_lvl1_costroll.parent_bom_id
WHERE (((PM_qryBOM_t.childid) IS NULL))
ORDER BY [PM_qryBOM_1].[parent_part_no] & "/" & [PM_qryBOM_1].[child_part_no];
나는이 방식으로 JOIN
을 원할 때 다른 여러 가지 쿼리를 사용합니다. 그래서 다음 쿼리에 동일한 구문을 적용하려고 시도했지만 오류가 발생합니다.
JOIN 표현식이 지원되지 않습니다. 두 쿼리에 대한
SELECT pm_qrybom_lvl0.lvl0,
pm_qrybom.childid AS LVL1,
pm_qrybom.qty,
[pm_qrybom_lvl0].[bom_address] & "/" & [pm_qrybom].[child_part_no] AS BOM_Address,
[pm_qrybom_lvl0].[bom_id] & "/" & [pm_qrybom].[childid] AS BOM_ID,
pm_qrybom_lvl0.bom_address AS Parent_BOM_Address,
pm_qrybom_lvl0.bom_id AS Parent_BOM_ID,
sol_avgcost.avgcost_material,
cm_qrypndj_avg.avgofunit_hrs,
cm_collections.cpq_material,
pm_qrybom_lvl1_costroll.mult,
Iif([cm_collections].[cpq_material] <> 0, [cm_collections].[cpq_material],
Iif([mult] = 0, [sol_avgcost].[avgcost_material], [mult])) AS Material_Calc
FROM ((((pm_qrybom_lvl0
INNER JOIN pm_qrybom
ON pm_qrybom_lvl0.lvl0 = pm_qrybom.parentid)
LEFT JOIN sol_avgcost
ON pm_qrybom.child_part_no = sol_avgcost.part_no)
LEFT JOIN cm_qrypndj_avg
ON pm_qrybom.child_part_no = cm_qrypndj_avg.part_no)
LEFT JOIN cm_collections
ON pm_qrybom.childid = cm_collections.partid)
LEFT JOIN pm_qrybom_lvl1_costroll
ON [pm_qrybom_lvl0].[bom_id] & "/" & [pm_qrybom].[childid] =
pm_qrybom_lvl1_costroll.parent_bom_id
ORDER BY [pm_qrybom_lvl0].[bom_address] & "/" & [pm_qrybom].[child_part_no];
구문과 동일하다. 참조 테이블 이름과 필드 이름 만 다릅니다. 그렇다면 왜 한 표현식에 표현식을 결합 할 수 있습니까? 나는이 문제를 탐색하고 JOIN
문에 ON
뒤에 모든 것을 대괄호로 묶으라고 제안했습니다. 나는 그것을 시도했지만 문제가 해결되지 않았다.
나는이 것에 절대적으로 붙어 있기 때문에 어떤 제안이라도 인정 될 것입니다.
구문이 테이블과 필드와 완전히 같지 않습니다. 후자에는 '내부 결합'이 있습니다. 액세스 쿼리는 여러 JOIN을 사용하여 자체적으로 스크립트를 작성하기가 매우 어렵습니다. SQL 디자인에서 '/'로'ON' 절의 오류를 믿을 수있는 쿼리 디자인을 가능한 한 많이 빌드 한 다음 SQL 뷰로 확장하십시오. – Parfait
내 제안은 중첩 된 조인을 제거하고 리팩터링하여 줄을 정렬하는 것입니다. 훨씬 읽기 쉽습니다. 나는 왜 Access가 이런 방식으로하는 것을 좋아하는지 모르지만, 이렇게 될 필요는 없습니다. 나는 그 방식으로 리팩토링 된 답변을 쓸 것입니다. – Alan
SQL보기에서 데이터 시트보기로 전환하면 Access에서 오류를 표시 한 다음 SQL의 일부를 강조 표시해야합니다. 어떤 부분입니까? – Andre