복붙노트

[SQL] 업데이트 쿼리 내에서 SELECT를 사용하여

SQL

업데이트 쿼리 내에서 SELECT를 사용하여

어떻게 마이크로 소프트 액세스 2007에서 SELECT 쿼리의 결과 테이블의 필드를 업데이트 할 수 있습니다.

다음은 선택 쿼리는 다음과 같습니다

SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
FROM TAX, FUNCTIONS

WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))

GROUP BY FUNCTIONS.Func_ID;

그리고 여기에 업데이트 쿼리는 다음과 같습니다

UPDATE FUNCTIONS

 SET FUNCTIONS.Func_TaxRef = [Result of Select query]

해결법

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

    1.음, UPDATE 쿼리에 집계를 할 수없는 액세스처럼 보인다. 그러나 SELECT 쿼리에서 집계 할 수 있습니다. 그래서 정의 등으로 쿼리를 만들 :

    음, UPDATE 쿼리에 집계를 할 수없는 액세스처럼 보인다. 그러나 SELECT 쿼리에서 집계 할 수 있습니다. 그래서 정의 등으로 쿼리를 만들 :

    SELECT func_id, min(tax_code) as MinOfTax_Code
    FROM Functions
    INNER JOIN Tax 
    ON (Functions.Func_Year = Tax.Tax_Year) 
    AND (Functions.Func_Pure <= Tax.Tax_ToPrice) 
    GROUP BY Func_Id
    

    그리고 YourQuery로 저장합니다. 이제 우리는 또 다른 액세스 제한을 해결할해야합니다. UPDATE 쿼리는 쿼리에서 작동 할 수 없지만 여러 테이블에서 작동 할 수 있습니다. 그래서이 테이블 만들기 쿼리 테이블에 쿼리를 돌려 보자 :

    SELECT YourQuery.* 
    INTO MinOfTax_Code
    FROM YourQuery
    

    이 매장은 테이블 뷰의 내용이 MinOfTax_Code을했다. 이제 당신은 UPDATE 쿼리를 수행 할 수 있습니다

    UPDATE MinOfTax_Code 
    INNER JOIN Functions ON MinOfTax_Code.func_id = Functions.Func_ID 
    SET Functions.Func_TaxRef = [MinOfTax_Code].[MinOfTax_Code]
    

    Access에서 SQL을하는 것은 약간의 신축성, 나는이 프로젝트에 SQL Server Express를 판에 보이는 것입니다!

  2. ==============================

    2.나는 액세스 / JET SQL에 상관 하위 쿼리의 한계 한참의 일부에 대해 쓴 및 SQL 업데이트 여러 테이블을 조인 구문을 지적했다. 그 정보와 빠른 테스트를 기반으로, 나는 하나의 SQL UPDATE 문에 당신이 Access를 사용하여 원하는 / JET를 할 수있는 방법이 생각하지 않습니다. 당신이 할 수 있다면, 문은 다음과 같이 읽을 것입니다 :

    나는 액세스 / JET SQL에 상관 하위 쿼리의 한계 한참의 일부에 대해 쓴 및 SQL 업데이트 여러 테이블을 조인 구문을 지적했다. 그 정보와 빠른 테스트를 기반으로, 나는 하나의 SQL UPDATE 문에 당신이 Access를 사용하여 원하는 / JET를 할 수있는 방법이 생각하지 않습니다. 당신이 할 수 있다면, 문은 다음과 같이 읽을 것입니다 :

    UPDATE FUNCTIONS A
    INNER JOIN (
      SELECT AA.Func_ID, Min(BB.Tax_Code) AS MinOfTax_Code
      FROM TAX BB, FUNCTIONS AA
      WHERE AA.Func_Pure<=BB.Tax_ToPrice AND AA.Func_Year= BB.Tax_Year
      GROUP BY AA.Func_ID
    ) B 
    ON B.Func_ID = A.Func_ID
    SET A.Func_TaxRef = B.MinOfTax_Code
    

    또한, 액세스 / JET 때로는 별도의 쿼리와 하위 쿼리를 저장 한 후 전통적인 방법으로 UPDATE 문에 합류와 함께 도망하게됩니다. 그래서, 예를 들어, 우리는 별도의 쿼리가 FUNCTIONS_TAX라는 이름으로, 다음 UPDATE 문이 될 것입니다 위의 SELECT 하위 쿼리를 저장 :

    UPDATE FUNCTIONS
    INNER JOIN FUNCTIONS_TAX
    ON FUNCTIONS.Func_ID = FUNCTIONS_TAX.Func_ID
    SET FUNCTIONS.Func_TaxRef = FUNCTIONS_TAX.MinOfTax_Code
    

    그러나이 여전히 작동하지 않습니다.

    나는 당신이이 일을 할 수있는 유일한 방법은 대역 최소 Tax_Code 값의 선택과 집계를 이동하는 것입니다 생각합니다. 당신은 접근을 DLookup 기능을 사용하여 더 쉽게 VBA 기능이 작업을 수행, 또는 수 있습니다. 별도의 쿼리 이름 FUNCTIONS_TAX에 위의 하위 쿼리하여 그룹을 저장하고 UPDATE 문을 다시 작성 :

    UPDATE FUNCTIONS
    SET Func_TaxRef = DLookup(
      "MinOfTax_Code", 
      "FUNCTIONS_TAX", 
      "Func_ID = '" & Func_ID & "'"
    )
    

    참고을 DLookup 기능은 제트 OLEDB를 통해 인스턴스에 대한 액세스의 사용 외부 인에서이 쿼리를 방지 함. 또한,이 방법의 성능에 따라 꽤 끔찍한 얼마나 많은 행 서브 쿼리가 순서대로 요점 물론, 그것은 더 이상 상관 관계 때문에 각 기능 행 (위해 실행되는대로 타겟팅 )가 작동하려면.

    행운을 빕니다!

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

    3.나는 비슷한 문제가 있었다. 나는 하나 개의 컬럼에 문자열을 찾을 원과 같은 테이블의 다른 열에서 그 값을 넣습니다. SELECT 문 아래의 괄호 안의 텍스트를 찾습니다.

    나는 비슷한 문제가 있었다. 나는 하나 개의 컬럼에 문자열을 찾을 원과 같은 테이블의 다른 열에서 그 값을 넣습니다. SELECT 문 아래의 괄호 안의 텍스트를 찾습니다.

    내가 Access에서 쿼리를 만들 때 나는 모든 필드를 선택했습니다. 그 쿼리에 대한 SQL보기에, 나는 내가 괄호와 내부에서 값을 가지고 싶었던 필드의 mytable.myfield 교체

    SELECT Left(Right(OtherField,Len(OtherField)-InStr((OtherField),"(")), 
                Len(Right(OtherField,Len(OtherField)-InStr((OtherField),"(")))-1) 
    

    나는 테이블 만들기 쿼리를 실행했습니다. 만들기 테이블 쿼리는 MYTABLE FROM INTO NameofNewTable와 위의 대체 및 끝 모든 필드가

  4. ==============================

    4.이 일을합니까? 안된하지만에 걸쳐 요점을 파악해야한다.

    이 일을합니까? 안된하지만에 걸쳐 요점을 파악해야한다.

    UPDATE FUNCTIONS
    SET Func_TaxRef = 
    (
      SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
      FROM TAX, FUNCTIONS F1
      WHERE F1.Func_Pure <= [Tax_ToPrice]
        AND F1.Func_Year=[Tax_Year]
        AND F1.Func_ID = FUNCTIONS.Func_ID
      GROUP BY F1.Func_ID;
    )
    

    기본적 FUNCTIONS의 각 행에 대해, 서브 쿼리는 최소 전류 세금 코드를 결정하고, 그 값으로 설정 FUNCTIONS.Func_TaxRef. 이 FUNCTIONS.Func_ID가 기본 또는 고유 키라고 가정한다.

  5. ==============================

    5.나는 VBA 기능을 활용 한 번 더 대답을 추가 할 않았다, 그러나 그것은 하나의 SQL 문에서 작업을 완수한다. 비록, 그것은 속도가 느려질 수 있습니다.

    나는 VBA 기능을 활용 한 번 더 대답을 추가 할 않았다, 그러나 그것은 하나의 SQL 문에서 작업을 완수한다. 비록, 그것은 속도가 느려질 수 있습니다.

    UPDATE FUNCTIONS
    SET FUNCTIONS.Func_TaxRef = DLookUp("MinOfTax_Code", "SELECT
    FUNCTIONS.Func_ID,Min(TAX.Tax_Code) AS MinOfTax_Code
    FROM TAX, FUNCTIONS
    WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))
    GROUP BY FUNCTIONS.Func_ID;", "FUNCTIONS.Func_ID=" & Func_ID)
    
  6. ==============================

    6.이 주제는 오래 알고,하지만 난 그것에 무언가를 추가 할 수 있습니다 생각했다.

    이 주제는 오래 알고,하지만 난 그것에 무언가를 추가 할 수 있습니다 생각했다.

    나는이 작품을 만들기 위해 Tomalak의 제안을 사용하여 액세스 2010 MS에서 SQL을 사용하여 선택 쿼리 작업과 업데이트를 만들 수 없습니다. 나는 스크린 샷을했지만, 그것을 게시 할 수 있도록 분명히이 사이트에 newb 너무 많이입니다.

    나는 쿼리 디자인 도구를 사용하여이 작업을 수행 할 수 있었다, 그러나 나는 확인 된 성공적인 업데이트 쿼리에서보고 된 것 같이, 액세스 나에게 일어날 만든 SQL을 표시 할 수 없습니다. 그래서 나 혼자 SQL 코드와 함께이 작품을 만들 수 없습니다.

    내가 만든 별도의 쿼리로 내 선택 쿼리를 저장. 쿼리 디자인 도구에서 나는 (그 사이에 연결을했다, 그래서 나는 선택 쿼리에 고유 키를 넣어) 내가 저장 한 선택 쿼리를 업데이트하기 위해 노력하고있어 테이블을 추가했습니다. Tomalak 제안했던 것처럼, 나는 업데이트 할 수있는 쿼리 유형을 변경했습니다. 그때 그냥 필드를 선택 (테이블을 지정) I 업데이트려고했다. "업데이트하려면"필드에서, 나는에서 가져온 선택 쿼리에서 필드의 이름을 입력했습니다.

    이 형식은 성공하고 원래의 테이블을 업데이트.

  7. from https://stackoverflow.com/questions/871905/use-select-inside-an-update-query by cc-by-sa and MIT license