2014-09-29 8 views
0
SQL에서

은 열 집합이 같은 값을 가지고해야한다는 조건은 반복적 인 비트 :"[column_list] is equal is"조건을 쓰는 방법은 무엇입니까?

SELECT * FROM t 
WHERE col1 = col2 
    AND col2 = col3 
    AND col3 = col4; 

그러나이 "두 개의 값이 동일 수 없다"타입의 조건으로 나쁜 절반 아니다 :

SELECT * FROM t 
WHERE col1 != col2 
    AND col1 != col3 AND col2 != col3 
    AND col1 != col4 AND col2 != col4 AND col3 != col4; 

각 열 쌍을 명시 적으로 비교하지 않고이 쿼리를 다시 작성할 수 있습니까? 그렇다면 어떻게해야합니까?

완벽한 세계에서 나는 이것을 처음으로 할 이유가 없었습니다. Oracle 11g의 무수한 수의 컬럼에서 작동하는 솔루션은 좋을 것입니다. 나는 DBMS와 관련하여 유연성을 가지고 있으며 (건설적인) 제안에 개방적이다.

답변

1

나는 이상한 상황에 동의합니다. 그러나 이론적으로 열을 행 (키 - 값 쌍)에 대해 unpivot 한 다음 값별로 그룹화하여 count (*)> 1을 확인하면됩니다. 모든 열에 고유 값이 있으면 행을 반환하지 않아야합니다.

select min(column_name), max(column_name), count(*) 
    from (select * from table t 
     unpivot (column_val FOR column_name IN (COL1, COL2, COL3, COL4)) 
     ) 
group by column_val 
having count(*) > 1; 

동적으로 작성할 수있는 피연산자 절.