반응형
중첩된 if 문장에서 mysql IF 문 오류
다음을 업데이트하기 위한 절차를 만들려고 합니다.stopTime
내 필드works
표. 제가 사용하는 쿼리는 다음과 같습니다.
update mydb.works set stopTime=
(IF((SELECT table_name FROM information_schema.tables WHERE table_schema = 'mydb' AND table_name = 'results_24') is NULL,
(select stampTime from mydb.works where id = 24),
(IFNULL((select stampTime from mydb.results_24 order by id desc limit 1),
(select stampTime from mydb.works where id = 24))))) where id=24;
곧 쿼리가 관련 정보를 가져옵니다.results_
테이블stampTime
~하듯이stopTime
의works
테이블의 관련 항목입니다.테이블이나 빈 테이블이 없는 경우,stampTime
에서works
테이블이 사용됩니다.
내 문제는 없을 때 발생합니다.results_
찾고 있는 테이블입니다.명세서는 관련성이 있는지 확인해야 합니다.results_*
테이블이 존재하고 그렇지 않으면 테이블은 다음을 얻어야 합니다.stampTime
부터works
테이블.
그러나 아래의 문(즉, ELSE 부분)도 실행합니다.
IFNULL((select stampTime from mydb.results_24 order by id desc limit 1)
그리고 오류가 발생했습니다(역시)
ERROR 1146 (42S02): Table 'mydb.results_24' doesn't exist
나는 괄호와 쉼표를 여러 번 확인했습니다.저는 그것에 대해 실수가 없다고 생각합니다.제가 무엇을 빠뜨리고 있나요?ELSE 부분을 실행하면 안되지만 실행됩니다. 왜죠?
감사해요.
OS: Raspbian
Mysql version: Mysql Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnueabihf (armv8l) using readline 5.2
GMB가 이미 말했듯이 당신은 동적 SQL이 필요합니다.
SELECT IF (EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = 'mydb' AND table_name = 'results_24')
,@sql := 'update mydb.works set stopTime = IFNULL((select stampTime from mydb.results_24 order by id desc limit 1)
,(select stampTime from mydb.works where id = 24));'
,@sql := 'update mydb.works set stopTime = (select stampTime from mydb.works where id = 24);');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
언급URL : https://stackoverflow.com/questions/64610470/mysql-if-statement-error-on-nested-if-sentence
반응형
'programing' 카테고리의 다른 글
루프가 있는 특정 테이블에서 N명의 사용자를 한 번에 선택하려면 어떻게 해야 합니까? (0) | 2023.09.04 |
---|---|
iOS Safari – 오버스크롤을 비활성화하면서 스크롤 가능한 div를 정상적으로 스크롤할 수 있도록 하는 방법은 무엇입니까? (0) | 2023.09.04 |
요소 내의 열 파손을 방지하는 방법은 무엇입니까? (0) | 2023.09.04 |
Spring Boot 자체 유효성 검사 제약 조건 오류 메시지를 반환하는 방법 (0) | 2023.09.04 |
Getting a lot of Mariadb log-error message with WSREP: cleanup transaction for LOCAL_STATE (0) | 2023.09.04 |