programing

테이블에 삽입하여 테이블에서 선택합니다. 여기서 열 이름 = xxx 및 열 이름 2 = yyy 루프가 너무 많습니다.

yoursource 2022. 9. 17. 10:51
반응형

테이블에 삽입하여 테이블에서 선택합니다. 여기서 열 이름 = xxx 및 열 이름 2 = yyy 루프가 너무 많습니다.

필요한 만큼 완전하지만 간결하도록 노력하겠습니다.제가 빠뜨린 게 있으면 알려주세요.

나는 일련의 활동을 가지고 있으며, 각각의 활동은 주어진 활동을 완료하기 위해 필요한 단계로 구성되어 있습니다.각 단계에는 단계에 따라 몇 가지 추가 구성 요소가 있습니다.이것을 트리로 본다면 다음과 같습니다.

ACTIVITY -- STEP ---- COMPONENT

컴포넌트 테이블의 데이터셋 결과를 다음에 나타냅니다.

여기에 이미지 설명 입력

mySQL insert/select 문을 작성하려고 합니다.이 문을 사용하면 다음 파일을 카피할 수 있습니다.ID = 84단, 삽입 시 ID 값은 의 새 ID를 상속해야 합니다.ACTIVITY(예를 들어, 299로 합시다)그리고 AID는 다음 명령어를 상속받아야 합니다.STEP값(예: 501,502,503,504,505,506)으로 설정합니다.

mySQL 문이 어떻게 보일지 알고 있지만, 문제가 아닙니다.문제는 새로운 ID와 새로운 AID 값을 전달할 수 있도록 루프를 작성하는 방법입니다.SID는 프라이머리 키(자동 증분)입니다.

위에서 주어진 데이터 세트로 6개의 새로운 레코드가 삽입될 것으로 예상됩니다.대신 9가 표시되므로 루프가 올바르게 루프되지 않거나 잘못된 데이터를 전달하고 있습니다.

루프는 다음과 같습니다.

for (local.data.newAID in local.data.list_newAID){
    //  COPY SET
    for (local.data.origAID in local.data.list_existingAID){
        local.formDataStruct.origAID = local.data.origAID;
        variables.workoutDAO.makeCopyCoreSet(
            origID = local.dataStruct.ID,
            newID = local.dataStruct.newID,
            origAID = local.dataStruct.origAID,
            newAID = local.dataStruct.newAID
        );
    }
}

여기 있습니다makeCopyCoreSet기능:

INSERT INTO SET(ID, LID, AID)
SELECT
    :newID, LID, :newAID
FROM
    Set
WHERE ID = :origID AND AID = :origAID;

제가 무엇을 빠뜨리고 있나요?

액티비티 중 하나를 복사하고 싶기 때문에 복사할 ID와 새 ID로 사용할 ID를 전달합니다(다른 방법이 없는 한).

variables.workoutDAO.NEW_makeCopyCoreSet(
            origID = local.dataStruct.ID,
            newID = local.dataStruct.newID
        );

그리고 우리 안에NEW_makeCopyCoreSet()function(CF 함수)에는 다음과 같은 쿼리가 있습니다.

INSERT INTO component (ID, LID, AID)
SELECT DISTINCT :newID, LID, AID 
FROM component
WHERE ID = :origID

(SQL 측에서) 동작 상태를 보려면:

https://dbfiddle.uk/?rdbms=ba4328dca3327814a7dc18fea284ead8

먼저 기본 데이터를 설정합니다.

/* SETUP 1 */
CREATE TABLE component ( ID int, LID int, AID int, SID int UNIQUE AUTO_INCREMENT)

/* SETUP 2 */
INSERT INTO component (ID, LID, AID)
SELECT 84,0,432 UNION ALL
SELECT 84,0,433 UNION ALL
SELECT 84,0,434 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,436 UNION ALL
SELECT 84,0,437

/* What's in the original? */
SELECT * FROM component
ID | LID | AID | SID-: | --: | --: | --:84 |   0 | 432 |   184 |   0 | 433 |   284 |   0 | 434 |   384 |   0 | 435 |   484 |   0 | 435 |   584 |   0 | 435 |   684 |   0 | 435 |   784 |   0 | 436 |   884 |   0 | 437 |   9

그런 다음 기존 ID를 새 ID로 복사합니다.

/* Copy an ID. */
INSERT INTO component (ID, LID, AID)
SELECT DISTINCT 299, LID, AID 
FROM component
WHERE ID = 84

/* What's in the table for the new ID? */
SELECT * FROM component WHERE ID = 299
ID | LID | AID | SID--: | --: | --: | --:299 |   0 | 432 |  16299 |   0 | 433 |  17299 |   0 | 434 |  18299 |   0 | 435 |  19299 |   0 | 436 |  20299 |   0 | 437 |  21

언급URL : https://stackoverflow.com/questions/53327049/insert-into-table-select-from-table-where-columnname-xxx-and-columnname2-yyy

반응형