쿼리 한번 봐주세요... 0 2 3,837

by 메시아나 [SQL Query] [2024.04.27 03:27:49]



위 사진과 같은 DB가 있습니다.

이를 Frontend 로 끌어내는 테이블 툴이 있는데, 이 테이블 툴은 Front end 에서 내용물을 수정할수있게 해주는 역활을 하고있습니다.

 

SELECT wp_fusion_form_entries.`submission_id`,
       wp_fusion_form_entries.`form_id`,
       wp_fusion_form_entries.`field_id`,
       wp_fusion_form_entries.`value`
FROM wp_fusion_form_entries
WHERE 1=1 
   AND wp_fusion_form_entries.`form_id` = '7'
   AND wp_fusion_form_entries.`field_id` > '30'
GROUP BY wp_fusion_form_entries.`submission_id`

위와같이 쿼리를 예시로 짜보면, Frontend 에서 데이터 수정이 가능한걸 확인하였습니다. (아무래도, 기존 DB모양 생긴걸 그대로 불러오는 방식이라 안꺠지는거 아닐까 추측해보았습니다)

문제는, 위와같이 불러오면, 아래의 예문처럼 필요자료갖 제대로 나열되지도 않을뿐더러, 별 쓸데가 없는 테이블이 됩니다.

 

 

하여, 부족한 지식으로, 코타나를 어루고 달래가며 아래와 같은 쿼리문을 받았는데...

테이블 생긴건 딱 제가 원하던 바 인데

 

이 쿼리문으로 하면 ,  (Close Error! There was an error trying to update the row! Error: Unknown column '' in 'where clause') 의 에러를 냅니다.

짧은 지식으로는, 불러오는 데이터 값의 행열을 바꿔버려서, Frontend 에서 해당 칼럼을 못찾는거같기도 하고...

 

SELECT  
    wp_fusion_form_entries.`form_id`,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 30 THEN wp_fusion_form_entries.`value` END) AS value_30,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 31 THEN wp_fusion_form_entries.`value` END) AS value_31,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 32 THEN wp_fusion_form_entries.`value` END) AS value_32,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 33 THEN wp_fusion_form_entries.`value` END) AS value_33,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 34 THEN wp_fusion_form_entries.`value` END) AS value_34,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 35 THEN wp_fusion_form_entries.`value` END) AS value_35,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 36 THEN wp_fusion_form_entries.`value` END) AS value_36,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 37 THEN wp_fusion_form_entries.`value` END) AS value_37,
    MAX(CASE WHEN wp_fusion_form_entries.`field_id` = 38 THEN wp_fusion_form_entries.`value` END) AS value_38
FROM 
    wp_fusion_form_entries
WHERE 
    wp_fusion_form_entries.`form_id` = 7
GROUP BY 
    wp_fusion_form_entries.`submission_id`

너무 한단계 한단계 막히다보니 도움이 필요하여 글 쓰게 되었습니다. ㅠ

많은 조언 부탁드립니다.

by 신히 [2024.04.28 09:30:03]

질문의 요지가 이해가 되지 않습니다.

대략적으로 첫쿼리는 CRUD가 잘 되는데 마지막 쿼리는 프론트엔드에서 오류가 난다는 뜻으로 읽힙니다.

1. DB와 연결된 프론트엔드가 무엇으로 작성되었는지, DB를 연결한 기술이 무엇인지(JPA?)

2. 하고자 하는게 무엇인지(프론트에서 수정히면 알아서 DB 가 업데이트 되기를 원히는건지)

-- 수정
다시 보니 질문이 이해가 되네요. 쿼리툴에서 조회 결과를 수정할 수 있는 조건이 있는데요, 테이블명(VIEW는 불가)과 키값(unique), 마지막으로 수정되거나 삽입될 컬럼명이 있습니다. 마지막의 쿼리는 이를 만족하지 않으므로 쿼리툴에서 UPDATE나 INSERT를 요청해도 오류가 날 수밖에 없습니다.


by 마농 [2024.04.29 08:42:08]

테이블 그대로를 조회하는 쿼리와
테이블 내용을 집계하여 추출하는 쿼리는
그 성격이 다릅니다.
테이블이 집계되어 나오는 결과는 원본과는 다른 집합이 됩니다.
이런 집계결과를 수정하여 원본에 반영한다는 것은
애초에 가능하지 않은 개념입니다.
또한 사용하신 집계쿼리는 표준 GROUP BY 사용법에 어긋나는 비표준 사용법입니다.
MySQL 에서만 동작이 허용되는 비표준 구문으로 표준 쿼리에서는 오류가 나는 구문입니다.
이렇게 사용하면 안됩니다.
 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입