두 개의 "선택"이 동일한지 확인합니다.
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
'programing' 카테고리의 다른 글
Woocommerce 3의 가변 제품 드롭다운에서 "옵션 선택"을 제거합니다. (0) | 2023.03.13 |
---|---|
NoSQL - MongoDB vs CouchDB (0) | 2023.03.13 |
렌더링 메서드 내 약속 포함 Rendering React 구성 요소 (0) | 2023.03.13 |
여러 콘텍스트에 대응 (0) | 2023.03.13 |
스크립트를 대체하는 하위 테마용 wp_dequeue_script (0) | 2023.03.13 |