반응형
중첩된 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 |