我有以下SQL字符串,它试图在FROM部分中将INNER JOIN和LEFT JOIN组合在一起。
如您所见,我使用表VIP_APP_VIP_SCENARIO_DETAIL_LE来执行查询。当我在这个表上使用它时,Access会给我一个“无效操作”错误。
有趣的是,当我使用VIP_APP_VIP_SCENARIO_DETAIL_BUDGET或VIP_APP_VIP_SCENARIO_DETAIL_ACTUALS表使用完全相同的查询时,它执行完美。
那么为什么它会在两个表上工作而不在另一个表上呢?所有字段都在所有表中,数据类型是正确的。
作为旁注:在带有错误的查询中,如果我将LEFT JOIN更改为INNER JOIN,它运行没有问题!我真的需要LEFT JOIN。
SELECT
D.MATERIAL_NUMBER,
D.MATERIAL_DESCRIPTION,
D.PRODUCTION_LOT_SIZE,
D.STANDARDS_NAME,
D.WORK_CENTER,
S.OP_SHORT_TEXT,
S.OPERATION_CODE,
D.LINE_SPEED_UPM,
D.PERCENT_STD,
D.EQUIPMENT_SU,
D.EQUIPMENT_CU,
D.OPERATOR_NUM,
V.COSTING_LOT_SIZE,
V.VOL_TOTAL_ADJ
FROM
([STDS_SCENARIO: TEST] AS D INNER JOIN MASTER_SUMMARY AS S ON
D.MATERIAL_NUMBER = S.MATERIAL_NUMBER AND D.WORK_CENTER = S.WORK_CENTER)
LEFT JOIN
(SELECT ITEM_CODE, COSTING_LOT_SIZE, VOL_TOTAL_ADJ
FROM
VIP_APP_VIP_SCENARIO_DETAIL_LE
WHERE SCENARIO_ID = 16968) AS V ON D.MATERIAL_NUMBER = V.ITEM_CODE
ORDER BY D.MATERIAL_NUMBER, D.STANDARDS_NAME, S.OPERATION_CODE;
答案 0 :(得分:0)
试图在SQL服务器中使用我自己的一些表来模拟它,但结构似乎有效,这遵循上面引用的模式。 (希望这里没有语法错误)
SELECT * FROM (
select
D.MATERIAL_NUMBER,
D.MATERIAL_DESCRIPTION,
D.PRODUCTION_LOT_SIZE,
D.STANDARDS_NAME,
D.WORK_CENTER,
S.OP_SHORT_TEXT,
S.OPERATION_CODE,
D.LINE_SPEED_UPM,
D.PERCENT_STD,
D.EQUIPMENT_SU,
D.EQUIPMENT_CU,
D.OPERATOR_NUM
FROM [STDS_SCENARIO: TEST] D
INNER JOIN MASTER_SUMMARY S
ON D.MATERIAL_NUMBER = S.MATERIAL_NUMBER AND D.WORK_CENTER = S.WORK_CENTER) AS J
LEFT JOIN
(SELECT ITEM_CODE, COSTING_LOT_SIZE, VOL_TOTAL_ADJ
FROM
VIP_APP_VIP_SCENARIO_DETAIL_LE
WHERE SCENARIO_ID = 16968) AS V ON J.MATERIAL_NUMBER = V.ITEM_CODE
ORDER BY J.MATERIAL_NUMBER, J.STANDARDS_NAME, J.OPERATION_CODE;
答案 1 :(得分:0)
得到朋友的帮助,我们发现这是链接的Oracle表和Access表之间的转换问题。为了解决这个问题,我们将链接字段的两面都转换为字符串:
CSTR(D. [MATERIAL_NUMBER])= CSTR(V. [ITEM_CODE])