programing

두 개의 "선택"이 동일한지 확인합니다.

codeshow 2023. 3. 13. 20:40
반응형

두 개의 "선택"이 동일한지 확인합니다.

2개의 선택(중요하지 않은)이 동일한지 확인할 수 있는 방법이 있습니까?

처음에 나는 두 선택 사이에서 공식적으로 동등하기를 희망했지만, sql-query-equivality를 증명하는 답변이 나를 멈추게 했다.

실제 필요하기 때문에 두 가지 선택 결과가 동일한지 확인만 하면 됩니다.

조회 결과를 비교하려면 다음을 수행하십시오.

(select * from query1 MINUS select * from query2) 
UNION ALL
(select * from query2 MINUS select * from query1)

이렇게 하면 쿼리 중 하나에서만 모든 행이 반환됩니다.

표준 SQL에서는 다음과 같이 쓸 수 있습니다.

(select * from query1 EXCEPT select * from query2) 
UNION ALL
(select * from query2 EXCEPT select * from query1)

MINUS는 표준 SQL이 아니기 때문에 대신 EXCUS를 사용해야 합니다.

위해서

(select * from query1 EXCEPT select * from query2)
 UNION ALL 
(select * from query2 EXCEPT select * from query1)

시험삼아 해봤는데postgres 9.4결과를 다음에 제시하겠습니다.

[1] 마이너스 기능은 지원되지 않으므로 사용해야 합니다.EXCEPT@Bogdan의 말대로

[2] 사용만EXCEPT중복을 고려하지 않기 때문에 사용해야 합니다.EXCEPT ALL

[3]EXCEPT ALL결과에서 열 순서가 동일해야 하므로 위의 질의에서 동일하게 해야 합니다.QUERY1그리고.QUERY2는 같은 컬럼 순서를 반환하거나 쿼리를 랩하여 컬럼 순서가 동일한지 확인해야 합니다.(어플리케이션 로직일 수 있습니다)

따라서 3점 이상을 염두에 둔다면 주어진 데이터 세트에 대해 두 개의 쿼리에서 반환된 데이터가 정확히 일치한다고 100% 확신할 수 있을 것입니다.

실패할 수 있는 엣지 케이스를 더 발견하면 업데이트 됩니다.

둘 다 실행하고 결과를 비교합니다.EXCLECT 연산을 사용하여 첫 번째 쿼리에서 반환된 집합을 두 번째 쿼리에서 반환된 집합에서 뺍니다.결과가 빈 집합일 경우 두 집합은 동일합니다.

이 방법의 문제는 2개의 쿼리가 어느 데이터베이스에 대해서도 동등하다는 것을 증명하지 못한다는 것입니다.데이터베이스의 내용에 따라 다릅니다.예를 들어, DB가 비어 있는 경우 이 방법에 따라 두 개의 선택 문장이 동일합니다.

쿼리 분석만으로 동등성을 증명하는 것은 미해결 문제 AFAIK(그러나 저는 데이터베이스 이론 전문가가 아니기 때문에 신뢰하지 마십시오).또한 SQL 쿼리의 동등성을 증명하는 질문도 보실 수 있습니다.

언급URL : https://stackoverflow.com/questions/5727882/check-if-two-selects-are-equivalent

반응형