복붙노트

[SQL] 전체는 MS 액세스에 가입

SQL

전체는 MS 액세스에 가입

내가 할 노력하고있어, 그래서 전체는 MS 액세스 2003에 참가하지만, 그것을 지원하지 않은에서 바로 발견했다. 내 두 개의 선택 문을 복용 시도하고 LEFT를 사용하여 하나를 조인 가입하고 같은 문하지만 RIGHT 조인과 함께 UNION을 따라서. 액세스는 명령을 가입하기에 뭔가 잘못이 있다는 말을 나에게 오류를했다. 일부 SQL을 Heres는 ...

SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum, 
tbl_Inventory.Color,  tbl_Inventory.InInventory, 
tbl_Inventory.OutInventory, 
(tbl_Inventory.Stocks +   tbl_Inventory.InInventory - 
tbl_Inventory.OutInventory) AS Balance,  
tbl_Inventory.Weight, tbl_Inventory.CF,   
(tbl_Inventory.Weight *Balance) AS TotalWeight, 
(tbl_Inventory.CF * Balance) AS TotalCF, 
tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate, 
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut, 
tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory 
    ON tbl_Vendors.vid = tbl_Inventory.VendorID)
LEFT JOIN tbl_ItemHistory 
ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum
ORDER BY tbl_Inventory.ItemNum, tbl_ItemHistory.orderDate 

이 코드 형식이 아닌 경우 죄송합니다, 제가 추측 액세스 SQL은 일반 텍스트입니다. 이 중 하나는 왼쪽 조인과 함께합니다. 당신은 어떤 아이디어가 있다면, 그렇게 말하십시오. 감사!

편집 : 2 단계 조인,

SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum, tbl_Inventory.Color, 
tbl_Inventory.InInventory, tbl_Inventory.OutInventory, 
(tbl_Inventory.Stocks+tbl_Inventory.InInventory-tbl_Inventory.OutInventory) AS Balance, 
tbl_Inventory.Weight, tbl_Inventory.CF, (tbl_Inventory.Weight*Balance) AS TotalWeight,    
(tbl_Inventory.CF*Balance) AS TotalCF, tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate, 
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut, tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory ON tbl_Vendors.vid = tbl_Inventory.VendorID) LEFT JOIN
tbl_ItemHistory ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum;
UNION ALL
SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum, tbl_Inventory.Color, 
tbl_Inventory.InInventory, tbl_Inventory.OutInventory, 
(tbl_Inventory.Stocks+tbl_Inventory.InInventory-tbl_Inventory.OutInventory) AS Balance, 
tbl_Inventory.Weight, tbl_Inventory.CF, (tbl_Inventory.Weight*Balance) AS TotalWeight,    
(tbl_Inventory.CF*Balance) AS TotalCF, tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate, 
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut, tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory ON tbl_Vendors.vid = tbl_Inventory.VendorID) RIGHT  
JOIN tbl_ItemHistory ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum;

오류 : 가입 표현은 지원되지 않습니다. 코드의 첫 번째 조각은 왼쪽 외부 조인을위한 좋았다. 나는이 왼쪽 조인하고 그 일을 시도했다. 그는 내 오른쪽에 가입 복용하지 ...

해결법

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

    1.귀하의 궁극적 인 목표는 전체 외부 조인을 모방하는 것이지만, 첫 번째 장애물은 액세스 '데이터베이스 엔진이 왼쪽이 시도 가입에 대한 불만이다. 먼저 조인 가능한을 작성해야합니다, 그리고 당신이 제공 한 샘플에 문제가 있는지 발견 할 수 없다.

    귀하의 궁극적 인 목표는 전체 외부 조인을 모방하는 것이지만, 첫 번째 장애물은 액세스 '데이터베이스 엔진이 왼쪽이 시도 가입에 대한 불만이다. 먼저 조인 가능한을 작성해야합니다, 그리고 당신이 제공 한 샘플에 문제가 있는지 발견 할 수 없다.

    액세스는이 단순화 된 버전을 동의합니까?

    SELECT *
    FROM
        (tbl_Vendors AS vend
        INNER JOIN tbl_Inventory AS inv
        ON vend.vid = inv.VendorID)
        LEFT JOIN tbl_ItemHistory AS hist
        ON inv.ItemNum = hist.ItemNum;
    

    순간을 위해, 우리는 필드 목록 또는 ORDER BY에 대해 우려하지 않을 ... 그 쿼리가 오류없이 작동하고 올바른 행을 반환 단순히 여부.

    이 작업을 수행하는 경우,이 권한은 반환 당신이 필요로하는 나머지 행을 가입 여부를 참조하십시오.

    SELECT *
    FROM
        (tbl_Vendors AS vend
        INNER JOIN tbl_Inventory AS inv
        ON vend.vid = inv.VendorID)
        RIGHT JOIN tbl_ItemHistory AS hist
        ON inv.ItemNum = hist.ItemNum
    WHERE inv.ItemNum Is Null;
    

    당신은 WHERE 절을 변경해야 할 수 있습니다; 즉, 검증되지 않은 공기 코드이었다. 그 또한 작동하지만, 하나에 2 개 개의 쿼리를 결합 :

    SELECT *
    FROM
        (tbl_Vendors AS vend
        INNER JOIN tbl_Inventory AS inv
        ON vend.vid = inv.VendorID)
        LEFT JOIN tbl_ItemHistory AS hist
        ON inv.ItemNum = hist.ItemNum
    UNION ALL
    SELECT *
    FROM
        (tbl_Vendors AS vend
        INNER JOIN tbl_Inventory AS inv
        ON vend.vid = inv.VendorID)
        RIGHT JOIN tbl_ItemHistory AS hist
        ON inv.ItemNum = hist.ItemNum
    WHERE inv.ItemNum Is Null;
    
  2. ==============================

    2.나는 두 테이블의 모든 행에 같은 값 더미 열을 만들었습니다. 그것은 즉시 수행 할 수 있습니다.

    나는 두 테이블의 모든 행에 같은 값 더미 열을 만들었습니다. 그것은 즉시 수행 할 수 있습니다.

    여기에 내가 사람과 활동을 한 예는 내가 모든 활동과 일치하는 모든 사람을 얻고 싶었다 :

    SELECT person, activity
    FROM (SELECT 1 as tag, person from person)  AS a
     INNER JOIN (SELECT 1 as tag, activity from activity)  AS b
     ON a.tag = b.tag
    ORDER BY person, activity;
    
  3. from https://stackoverflow.com/questions/6998423/full-join-on-ms-access by cc-by-sa and MIT license