Program Tip

MySQL의 "IF EXISTS"사용

programtip 2020. 11. 20. 09:26
반응형

MySQL의 "IF EXISTS"사용


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

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 기능은 사용할 수 없습니다. 따라서 두 쿼리 모두에 영향을 미칩니다.

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 = ?)

RichardTheKiwi 의 예가 매우 유익 하다는 것을 알았 습니다.

다음과 같은 것을 찾고 있다면 다른 접근 방식을 제공하기 위해 IF EXISTS (SELECT 1 ..) THEN ...

-내가 MSSQL로 쓸 수있는 것

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의 솔루션의 한 가지 문제점은 (Select 1 = 1 ...) 하위 쿼리가 일부 상황에서 둘 이상의 행을 반환 할 수 있으므로 오류가 발생한다는 점에서 "If Exists"처럼 작동하지 않는다는 것입니다. 나는 그 대답에 직접 응답 할 권한이 없기 때문에 다른 사람이 내가 겪은 문제를 해결하고 다른 사람들이 MSSQLServer "존재하는 경우"에 상응하는 솔루션이 아니라는 것을 알 수 있도록 여기에 언급 할 것이라고 생각했습니다!


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

반응형