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
'Program Tip' 카테고리의 다른 글
REPL에서 Clojure 버전을 표시하는 방법은 무엇입니까? (0) | 2020.11.20 |
---|---|
파일 핸들을 사용하여 파일 이름 가져 오기 (또는 파일 삭제) (0) | 2020.11.20 |
IntelliJ에서 한 줄에 대한 경고 비활성화 (0) | 2020.11.20 |
postgresql의 IF-THEN-ELSE 문 (0) | 2020.11.20 |
.gitignore 특정 파일 제외 (0) | 2020.11.20 |