programing

MySQL의 "IF EXISTES" 사용 방법

bestcode 2022. 11. 8. 21:48
반응형

MySQL의 "IF EXISTES" 사용 방법

다음은 작업하고 싶지만 오류 메시지가 반환되는 두 가지 문장입니다.

IF EXISTS (SELECT * FROM gdata_calendars WHERE `group` =  ? AND id = ?) SELECT 1 ELSE SELECT 0

그리고.

IF ((SELECT COUNT(*) FROM gdata_calendars WHERE `group` =  ? AND id = ?) > 0)  SELECT 1 ELSE SELECT 0;

물음표는 PHP의 PDO와 함께 매개 변수화되고 준비된 문장을 사용하기 때문에 나타납니다.다만, 데이터도 수동으로 실행하려고 했지만, 실제로는 동작하지 않습니다.

각각이 왜 동작하지 않는지 알고 싶지만, 동작할 수 있다면 첫 번째 쿼리를 사용하고 싶습니다.

IF 컨트롤 블록 OUTSIDE of Functions는 사용할 수 없습니다.두 가지 질문에 모두 영향을 미칩니다.

IF 함수 내에서 대신 EXISTS 절을 하위 쿼리로 변환합니다.

SELECT IF( EXISTS(
             SELECT *
             FROM gdata_calendars
             WHERE `group` =  ? AND id = ?), 1, 0)

실제로 부란은 1 또는 0으로 반환됩니다.

SELECT EXISTS(
         SELECT *
         FROM gdata_calendars
         WHERE `group` =  ? AND id = ?)

리처드라는 예시를 찾았어요Kiwi는 매우 유익합니다.

다른 접근방식을 제안하기 위해 다음과 같은 방법을 찾고 있습니다.IF EXISTS (SELECT 1 ..) THEN ...

-- MSQL에 쓸 수 있는 내용

IF EXISTS (SELECT 1 FROM Table WHERE FieldValue='')
BEGIN
    SELECT TableID FROM Table WHERE FieldValue=''
END
ELSE
BEGIN
    INSERT INTO TABLE(FieldValue) VALUES('')
    SELECT SCOPE_IDENTITY() AS TableID
END

-- MySQL용으로 고쳐 썼다.

IF (SELECT 1 = 1 FROM Table WHERE FieldValue='') THEN
BEGIN
    SELECT TableID FROM Table WHERE FieldValue='';
END;
ELSE
BEGIN
    INSERT INTO Table (FieldValue) VALUES('');
    SELECT LAST_INSERT_ID() AS TableID;
END;
END IF;

받아들여진 답변은 잘 작동하며, 또한 사용자는 그냥 사용할 수 있습니다.

If Exists (...) Then ... End If; 

Mysql 프로시저의 구문(상황에 따라 허용되는 경우)을 지정하면 원하는 대로/예상대로 동작합니다.자세한 소스/설명에 대한 링크는 다음과 같습니다.https://dba.stackexchange.com/questions/99120/if-exists-then-update-else-insert

@SnowyR의 솔루션과 관련된 문제 중 하나는 (선택 1 = 1 ...) 서브쿼리가 여러 행을 반환할 수 있기 때문에 오류가 발생할 수 있다는 점에서 실제로 "If Exists"와 같이 동작하지 않는다는 것입니다.이 답변에 직접 응답할 수 있는 권한이 없기 때문에 제가 겪은 문제를 다른 사람이 해결할 수 있고 다른 사람이 MSSQLServer와 동등한 솔루션이 아니라는 것을 알 수 있도록 여기서 언급하려고 합니다.

테이블에 자동 증가 기본 키가 있는 경우 다음을 사용할 수 있습니다.REPLACE INTO ... VALUES

SELECT @id := id FROM tableName WHERE fieldName='criteria value' LIMIT 1;
REPLACE INTO tableName(id, fieldName, col1, col2)
VALUES (@id, 'criteria value', 'value1', 'value2')

select 문이 반환되는 경우NULL새 행이 삽입됩니다.그렇지 않으면 행이 발견되면 행이 키로 업데이트됩니다.@id.

SELECT IF((
     SELECT count(*) FROM gdata_calendars 
     WHERE `group` =  ? AND id = ?)
,1,0);

상세한 것에 대하여는, 여기를 참조해 주세요.

if exists(select * from db1.table1 where sno=1 )
begin
select * from db1.table1 where sno=1 
end
else if (select * from db2.table1 where sno=1 )
begin
select * from db2.table1 where sno=1 
end
else
begin
print 'the record does not exits'
end

언급URL : https://stackoverflow.com/questions/5528854/usage-of-mysqls-if-exists

반응형