programing

중첩된 if 문장에서 mysql IF 문 오류

lastmoon 2023. 9. 4. 20:33
반응형

중첩된 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~하듯이stopTimeworks테이블의 관련 항목입니다.테이블이나 빈 테이블이 없는 경우,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

반응형