MySQL에서는 WHERE
절에 임시 변수를 사용할 수 있나요?
예를 들어 다음 쿼리에서는:
으아악@var가 `id` 값의 두 배로 성공적으로 설정되었습니다
그러나 @var가 10보다 작은 결과만 포함하도록 결과 집합을 필터링하려고 하면 다음과 같습니다.
으아악그러고 보니 아무런 결과도 나오지 않았습니다.
@var 값을 기준으로 결과를 필터링하는 방법은 무엇입니까?
P粉7606754522023-10-25 09:10:31
Q: MySQL 임시 변수를 WHERE 절에 사용할 수 있나요?
네. MySQL 사용자 정의 변수(예: @var
)는 WHERE 절에서 참조될 수 있습니다.
사용자 정의 변수는 표현식이 평가될 때 현재 할당된 모든 값에 대한 참조입니다.
쿼리에서 WHERE 절의 조건자는 SELECT 목록의 표현식보다 먼저 평가됩니다.
즉, 행에 액세스하면 @var < 10
이 각 후보 행에 대해 부울 표현식으로 평가되고, 표현식이 평가되어 결과가 TRUE인 경우에만 행이 반환됩니다.
이 변수에 10보다 크거나 같은 숫자 값을 지정하면 명령문을 실행하기 전에 모든 행이 반환됩니다.
Q: @var
값을 기준으로 결과를 필터링하는 방법은 무엇입니까?
정말 그럴 수 없어요. (실제로 원래 쿼리가 수행하는 작업이 바로 이것이었습니다.)
@var
之外的其他表达式中包含谓词;这些表达式可以从分配给 @var
이외의 표현식에 술어를 포함할 수 있습니다. 이러한 표현식은
HAVING
子句来过滤返回的行。 (注意:HAVING
子句在结果集准备好之后进行计算;与 WHERE
옵션으로 SELECT 목록에서 표현식을 반환한 다음 행에 액세스할 때 평가하는 다른
또 다른 옵션은 인라인 뷰를 사용하여 결과 집합을 준비한 다음 외부 쿼리에서 반환된 표현식에 WHERE 절을 사용할 수 있는 것입니다.
@var
以外的表达式应用谓词;他们实际上并没有对 @var
그러나 엄밀히 말하면 이러한 방법은 모두
P粉5305192342023-10-25 00:42:47
별칭을 할당하고 HAVING
절에서 테스트해야 합니다.
한 행에서 다음 행으로 내부 결과를 전달하는 대신 수식을 사용하여 필터링하는 경우에는 이 변수가 전혀 필요하지 않습니다. 다음과 같이 쓸 수 있습니다:
으아아아