그런 다음 또는 이전 행에 액세스 할 수 없습니다. 정확하게 말하면 실제로 다음 또는 이전 행이 없습니다. 즉, 데이터베이스 데이터에 지정하지 않으면 특정 순서가 없음을 의미합니다. 쿼리에 ORDER BY one_or_multiple_columns
이 없으면 쿼리를 실행할 때마다 반환되는 결과가 다른 순서로 표시 될 수 있습니다. 그런 다음이
SELECT * FROM table alias_a
INNER JOIN table alias_b ON a.id = b.id + 1
같은 것을 일 것 자체에 테이블을 가입
:
당신이 두 가지 가능성을 가지고 말했다 CASE WHEN a.whatever = b.whatever THEN 'error' ELSE 'cool' END
이 작동하지만, 예를 들어 다음 ID가가 아닌 경우와 같이 꽤 빨리 못 생길 수 있습니다.가끔 +2
행을 언젠가 삭제했거나 다른 원인으로 인해. 또는 성능상으로 이것은 어쨌든 좋지 않을 수 있습니다 ...
나는 이와 같은 경우 변수를 사용하는 것을 선호합니다.
SELECT
yt.*,
CASE WHEN @prevID = id THEN 'oops, same id as row before' ELSE 'another_id' END AS is_it_different,
@prevID := id
FROM your_table yt,
(SELECT @prevID := 0) table_alias__variable_initialization
ORDER BY id, another_column_determining_the_order_of_ids
앞서 언급 한 것처럼 ORDER BY
이 중요합니다.
CASE WHEN ...
변수 @prevID
에는 여전히 이전 행의 값이 있습니다. 명령.의 다음 행에서 현재 행의 값이 변수에 지정됩니다.
샘플 데이터와 원하는 출력을 텍스트 형식으로 게시하십시오. – peterm