복붙노트

[SQL] 어떻게 Access에서 하위 쿼리와 업데이트 쿼리를 수행합니까?

SQL

어떻게 Access에서 하위 쿼리와 업데이트 쿼리를 수행합니까?

나는 포트에 액세스 데이터베이스, SQL 서버, MySQL은, 오라클에서 잘 작동이 SQL 쿼리를합니다. 어떻게 그렇게 할 수 있습니까? 지금은 어떤 이유로 COMPANY_ID 저를 묻는 메시지를 표시합니다.

편집 : 내가 처음 VendorRegKeys에서 COMPANY_ID 열을 생성하는 것을 잊었다 때문에 프롬프트를 얻고 있었다. 지금은 오류가 "작업이 업데이트 가능한 쿼리를 사용해야합니다"얻고있다.

UPDATE VendorRegKeys
   SET Company_ID = (SELECT Users.Company_ID
                     FROM Users
                     WHERE Users.User_ID = VendorRegKeys.CreatedBy_ID)

업데이트 : 나는 JuniorFlip의 답변에 따라 작업이 발견 :

UPDATE VendorRegKeys, Users
SET VendorRegKeys.Company_ID = Users.Company_ID
WHERE VendorRegKeys.CreatedBy_ID = Users.User_ID

해결법

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

    1.COMPANY_ID이 VendorRegKeys 또는 사용자의 기존 필드가 아니기 때문에 그 수 있습니다.

    COMPANY_ID이 VendorRegKeys 또는 사용자의 기존 필드가 아니기 때문에 그 수 있습니다.

    편집하다:

    UPDATE VendorRegKeys
    INNER JOIN Users ON Users.User_ID = VendorRegKeys.CreatedBy_ID
    SET VendorRegKeys.Company_ID = Users.Company_ID
    
  2. ==============================

    2.똑바로 대답 : 당신은 할 수 없습니다. Access 데이터베이스 엔진 단순 바닐라 SQL-92를 지원하지 않는 스칼라 하위 쿼리 구문 경우에도 자신의 소위 ANSI-92 쿼리 모드이다.

    똑바로 대답 : 당신은 할 수 없습니다. Access 데이터베이스 엔진 단순 바닐라 SQL-92를 지원하지 않는 스칼라 하위 쿼리 구문 경우에도 자신의 소위 ANSI-92 쿼리 모드이다.

    당신은 즉 안전하지 않은 스칼라 요구 사항을 적용하지 않고 ** 임의 조용히 값을 선택할 것 독자적인 구문을 사용하도록 강요하고 있습니다. (당신이 처음에 하나를 사용하도록 허용 된 경우) 또한,하지가 전혀 작동하지 않습니다 간단한 구조를 넘어, 특히 하위 조회가 설정 기능 (MAX, SUM 등)를 사용하는 경우 - 정말 불만족에 대한이 문서를 참조하십시오 해결 방법을 설명합니다.

    죄송합니다 부정적 그러나 이것은 정말 기본 구문 및 액세스 팀은 아직 고정 주위를 확보하지 않은 이유를 이해할 수 없습니다. 내가 심각하게 더 이상 액세스 데이터베이스 엔진을 할 수없는 이유 패배를 모르는 번호 하나의 이유이다.

    액세스 독점 UPDATE..JOIN..Set 구문의 안전하지 않은 동작을 보여주기 위해

    CREATE TABLE Users
    ( 
      User_ID CHAR( 3 ) NOT NULL,
      Company_ID CHAR( 4 ) NOT NULL,
      UNIQUE ( Company_ID, User_ID ) );
    
    CREATE TABLE VendorRegKeys
      CreatedBy_ID CHAR( 3 ) NOT NULL UNIQUE,
      Company_ID CHAR( 4 ) );
    
    INSERT INTO Users VALUES ( 'Kip', 'MSFT' );
    INSERT INTO Users VALUES ( 'Kip', 'AAPL' );
    
    INSERT INTO VendorRegKeys VALUES ( 'Kip', NULL );
    
    UPDATE VendorRegKeys
    INNER JOIN Users ON Users.User_ID = VendorRegKeys.CreatedBy_ID
    SET VendorRegKeys.Company_ID = Users.Company_ID;
    

    액세스 내에서 업데이트 문을 실행하면, UI는 우리에게 경고

    사실에도 불구하고 VendorRegKeys 테이블에 한 행이 있습니다!

    무엇 실제로 일어나는 것은있을 것입니다 예측하는 신뢰할 수있는 방법없이, 우리가 단일 행의 열을 업데이트하는 데 사용됩니다 값 중 하나입니다.

    표준 SQL의 스칼라 하위 쿼리 구문을 사용하면 오류가 발생하는 것입니다 명령문이 틀림없이 원하는 기능이다, 실행 실패 (표준 SQL의 MERGE 구문도이 방식으로 동작합니다).

  3. ==============================

    3.당신이 하나를 시도 할 수

    당신이 하나를 시도 할 수

    update a
    set a.company_id = b.company_id
    from vendorRegkeys a, users b
    where a.createdby_id = b.user_id
    
  4. from https://stackoverflow.com/questions/1375207/how-do-i-perform-update-query-with-subquery-in-access by cc-by-sa and MIT license