2012-04-03 2 views
7

이 테이블 단어 오라클 SQL

WORD 
Hello 
Aardvark 
Potato 
Dog 
Cat 

그리고이 목록을 가지고 테이블에있는 값 NOT을 찾을 수 단어 표,하지만 내 목록에 있습니까?

나는 "가능한 모든 단어를 포함"고 테이블이있는 경우, 내가 할 수있는 :

SELECT * from ALL_WORDS_TABLE 
where word in ('Hello', 'Goodbye', 'Greetings', 'Dog') 
and word not in 
(SELECT word from WORDS 
where word in ('Hello', 'Goodbye', 'Greetings', 'Dog') 
); 

그러나 나는 이러한 테이블이 없습니다. 어떻게이 일을 할 수 있습니까?

또한 액세스 수준이 없으므로 새 테이블을 구성 할 수 없습니다.

답변

25

:

+0

멋진 기술) sys. * 기능에 대한 액세스가 거부되면 어떻게됩니까? – denied

+0

@denied 글쎄 그건 참으로 어색 할 것입니다. 구분 된 문자열 목록을 sys.dbms_debug_vc2coll보다 더 효율적인 열로 변환하는 다른 방법이있을 수 있습니다. 아마도 pure SQL을 사용하는 솔루션이 있을까요? – Wolf

+0

@Denied이 문맥에서'sys'는 나쁜 것이 아닙니다. 이론적으로 누군가가 그 유형에 대한 액세스를 거부 할 수는 있지만 걱정할 필요는 없습니다. 그것은'sys.dbms_output'에 대한 액세스를 제거하는 것과 같습니다. –

5

이 같은 뷰에 목록을 설정할 수 있습니다 :

select 'Hello' as word from dual 
union all 
select 'Goodbye' from dual 
union all 
select 'Greetings' from dual 
union all 
select 'Dog' from dual 

그런 다음 당신이 선택할 수 있습니다

select * from 
(
    select 'Hello' as word from dual 
    union all 
    select 'Goodbye' from dual 
    union all 
    select 'Greetings' from dual 
    union all 
    select 'Dog' from dual 
) 
where word not in (select word from words); 

을 가능하게하지 깔끔한 해결책을 당신이 기대 수도로 ..

테이블을 만들 권한이 충분하지 않으므로 유형을 만들 수는 없다고 말하지만 데이터베이스에 적절한 유형의 "거짓말"이 있으면 찾을 수 있습니다. 이 :

select * from table (table_of_varchar2_type('Hello','Goodbye','Greetings','Dog')) 
where column_value not in (select word from words); 
여기

table_of_varchar2_type처럼 정의 된 유형의 이름으로 상상 :

당신이 찾아 낼 수있을 가능성이있다 하나 개는 이러한 유형의 테이블 SYS.KU$_VCNT입니다
create type table_of_varchar2_type as table of varchar2(100); 

VARCHAR2 (4000). 다음 인 두 번째 쿼리에서 행을 제거하기 위해 MINUS 연산자를 사용하여 동적으로 행으로 구분 된 목록을 변환 DBMS_DEBUG_VC2COLL를 사용하여 행에 목록 값을 하드 코딩하는 대신

SELECT 
a.word 
FROM 
(
SELECT 'Hello' word FROM DUAL UNION 
SELECT 'Goodbye' word FROM DUAL UNION 
SELECT 'Greetings' word FROM DUAL UNION 
SELECT 'Dog' word FROM DUAL 
) a 
LEFT JOIN ALL_WORDS_TABLE t ON t.word = a.word 
WHERE 
t.word IS NULL 
4

이 솔루션을 사용해보십시오 첫 번째 쿼리에 포함되지 않음 :

select column_value 
from table(sys.dbms_debug_vc2coll('Hello', 'Goodbye', 'Greetings', 'Dog')) 
minus 
select word 
from words;