MS Access INNER JOIN / LEFT JOIN问题

时间:2017-07-13 20:04:08

标签: sql excel-vba ms-access vba excel

我有以下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;

2 个答案:

答案 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])