복붙노트

[SQL] 열고 주변의 가까운 브래킷 MS 액세스 SQL에서 조인 할 때

SQL

열고 주변의 가까운 브래킷 MS 액세스 SQL에서 조인 할 때

나는 MS 액세스가 나는 유사한 쿼리를 생성하는 동일한 코드를 적용 할 수 있도록 쿼리에 대한 C ++를 사용하여 빌더 쿼리를 개발하고로 MS Access 쿼리에서 조인 나타내는 경우 열고 닫을 괄호시기를 이해하고자합니다.

SELECT 
    MasterTool.Name, Toolsets.SlaveToolID, Tools.MachineID  
FROM 
    Tools AS MasterTool
    LEFT JOIN 
    (
        Toolsets LEFT JOIN Tools ON Toolsets.SlaveToolID = Tools.ID
    )
    ON MasterTool.ID = Toolsets.MasterToolID

편집하다:

@LeeMac은 explaination에 따라 나는이에 앞서 제시 한 쿼리를 수정하는 경우

   SELECT Tools.Name, Toolsets.SlaveToolID, Tools.MachineID  FROM (Tools  
   LEFT JOIN  Toolsets ON Toolsets.SlaveToolID = Tools.ID )
   LEFT JOIN  Tools ON  Toolsets.MasterToolID = Tools.ID

내가 오류가 지원되지 않는 표현을 가입 얻고 것은 위의 쿼리를 작성하는 어떤 간단한 방법이있다.

해결법

  1. ==============================

    1.석사 Access 쿼리 참조 두 개 이상의 테이블, 모든 연속적인 테이블 한 쌍의 사이에 가입 할 때 기본적으로 괄호 내에 중첩되어야한다.

    석사 Access 쿼리 참조 두 개 이상의 테이블, 모든 연속적인 테이블 한 쌍의 사이에 가입 할 때 기본적으로 괄호 내에 중첩되어야한다.

    예를 들어, 두 개의 테이블이있는 질의는 괄호를 필요로하지 않는다 :

    select *
    from a inner join b on a.id = b.id
    

    일본어를 둘러싼 제 조인 테이블 필요로 괄호의 추가는 추가적인 가입 구별하기 위해 조인

    select *
    from 
    (
        a inner join b on a.id = b.id
    ) 
    inner join c on a.id = c.id
    

    테이블의 모든 연속 또한 다음 기존의 원인이됩니다 것은 괄호의 또 다른 수준의 중첩되는 조인

    select *
    from 
    (
        (
            a inner join b on a.id = b.id
        ) 
        inner join c on a.id = c.id
    )
    inner join d on a.id = d.id
    

    따라서, 일반적으로 :

    select *
    from 
    (
        (
            (
                (
                    table1 [inner/left/right] join table2 on [conditions]
                ) 
                [inner/left/right] join table3 on [conditions]
            )
            [inner/left/right] join table4 on [conditions]
        )
        ...
    )
    [inner/left/right] join tableN on [conditions]
    

    왼쪽 / 오른쪽이 중첩의 순서는, 예를 들어, 조인의 방향을 유지해야한다는 점에서 우려 연결하는 미묘함이있다 :

    select *
    from 
    (
        c left join b on c.id = b.id
    ) 
    left join a on a.id = b.id
    

    에 순열 될 수 있습니다 :

    select *
    from 
    c left join
    (
        b left join a on b.id = a.id
    )
    on c.id = b.id
    
  2. from https://stackoverflow.com/questions/53582984/when-to-open-and-close-brackets-surrounding-joins-in-ms-access-sql by cc-by-sa and MIT license