2011-09-29 2 views
2

아무런 결과도 얻지 못하는 가능한 가장 리소스 사용량이 적은 쿼리를 찾고 있습니다. 예를 들어 (이 작동하지 않습니다) :결과가없는 MySQL 최단 쿼리

SELECT 1 WHERE 0 

편집 : 이 목표는 내가 전혀 일치하지 않으려는 특별한 경우 하위 쿼리를 EXISTS에 사용하는 것입니다. (이것이 유일한 해결책은 아니라는 것을 알고 있지만, 내 환경에서는 이것을 사용하기로했습니다.)

+0

왜 '존재하지 않는 결과 하위 쿼리'를 'WHERE FALSE'로 변경하지 않습니까? –

+0

@ypercube 존재하는 서브 쿼리는'WHERE EXISTS (결과 없음) 또는 EXISTS (기타) '와 같은 다른 존재 서브 쿼리와 결합하여 사용됩니다. 확실히 리팩토링이 필요하지만 지금은 가장 안전한 솔루션입니다 (버그를 도입 할 가능성이 가장 적습니다). – vbence

답변

3
SELECT 1 FROM DUAL WHERE 0 

이 일을 할 것입니다 할 수있는; 당신은 이전에 USE- 성명조차 필요로하지 않을 것입니다.

+0

감사합니다. 이전에 내가 사용하는 바보 같은 GUI 때문에'SELECT * FROM (SELECT 1) AS A WHERE 0'을 기각했지만, 매우 오도 된 결과를 보여주었습니다 ... – vbence

+0

'SELECT * FROM (SELECT 1) AS A WHERE 0'도 유효한 해결책입니다. . –

1

SELECT 1; 작동하지만 결과 집합을 제공합니다
시도해 볼 수 있습니다 SELECT NULL from <any table>
USE <database name> 성명은 결과가없고 최소한의 자원을 차지합니다.

정확히 무엇입니까?

+0

SELECT 1은 결과를 반환합니다. 쿼리가 아니지만 USE db 응답이 정확할 수 있습니다. –

+1

"정확히이게 뭐야?" –

+0

USE의 문제점은 (하위) 쿼리로 사용할 수 없다는 것입니다. – vbence

3
select '1' from tableName where 0 
+0

이것은 리소스 사용량이 적기 때문에 테이블을로드하는 것을 포함합니다. – vbence

+0

@vbence -이게 뭐야? 우리가 알면 쉽게 도울 것입니다 –

+1

@vbence : 이것 역시 유효한 해결책입니다. 테이블을로드하지 않습니다. 이유를 보려면'EXPLAIN SELECT 1 FROM tableName WHERE 0'을 시도하십시오. –

0

아마 당신은

select 1 where 1=0 
+0

아니요, 테이블을로드하지 않으면 WHERE을 사용할 수 없습니다. – vbence