LE Access在MS Access中加入

时间:2012-09-05 02:06:01

标签: sql ms-access join left-join

我正在尝试对其他人的MS Access查询进行故障排除,并且不断收到无效的操作错误。帮助似乎不适用,因为我只是运行查询。它全部用作INNER JOINS,但当我切换回LEFT JOIN错误时。


SELECT *
 FROM ((((orders 
 INNER JOIN orders_customers ON orders.CUST_ORDER_ID = orders_customers.ID) 
 LEFT JOIN quoted_theory ON orders.PART_ID = quoted_theory.PART_ID) 
 LEFT JOIN conversions ON orders.PART_ID = conversions.PART_ID) 
 LEFT JOIN dbo_WO_Header ON orders.CUST_ORDER_ID = dbo_WO_Header.PPC_Number) 
 INNER JOIN lines_qry ON orders.CUST_ORDER_ID = lines_qry.WORKORDER_BASE_ID

我可以获得一级LEFT JOIN,但每次添加第二个LEFT JOIN时,都会弹出错误。

2 个答案:

答案 0 :(得分:3)

在混合INNER和LEFT联接时,访问'db引擎经常是balks。如果该查询在没有最后一个内部联接的情况下工作......

SELECT *
FROM
    (((orders INNER JOIN orders_customers
    ON orders.CUST_ORDER_ID = orders_customers.ID)
    LEFT JOIN quoted_theory
    ON orders.PART_ID = quoted_theory.PART_ID)
    LEFT JOIN conversions
    ON orders.PART_ID = conversions.PART_ID)
    LEFT JOIN dbo_WO_Header
    ON orders.CUST_ORDER_ID = dbo_WO_Header.PPC_Number

...然后您可以将该部分作为子查询和内部联接lines_qry尝试到子查询。它可能会超过错误。

SELECT *
FROM
    (
        SELECT *
        FROM
            (((orders INNER JOIN orders_customers
            ON orders.CUST_ORDER_ID = orders_customers.ID)
            LEFT JOIN quoted_theory
            ON orders.PART_ID = quoted_theory.PART_ID)
            LEFT JOIN conversions
            ON orders.PART_ID = conversions.PART_ID)
            LEFT JOIN dbo_WO_Header
            ON orders.CUST_ORDER_ID = dbo_WO_Header.PPC_Number
    ) AS sub
    INNER JOIN lines_qry
    ON sub.CUST_ORDER_ID = lines_qry.WORKORDER_BASE_ID

如果除orders之外的任何其他表格都包含名为CUST_ORDER_ID的字段,则您需要在子查询中使用SELECT *以外的其他内容,以避免歧义。

答案 1 :(得分:0)

SELECT *
FROM
    (
        SELECT *
        FROM
            (((orders INNER JOIN orders_customers
            ON orders.CUST_ORDER_ID = orders_customers.ID)
            LEFT JOIN quoted_theory
            ON orders.PART_ID = quoted_theory.PART_ID)
            LEFT JOIN conversions
            ON orders.PART_ID = conversions.PART_ID)
            LEFT JOIN dbo_WO_Header
            ON orders.CUST_ORDER_ID = dbo_WO_Header.PPC_Number
    ) AS sub
    INNER JOIN lines_qry
    ON sub.CUST_ORDER_ID = lines_qry.WORKORDER_BASE_ID