2013-01-21 5 views
0

저는 처음으로 SQL 세계에 입학 한 학생으로 to_somedatatype을 사용하는 방법에 대해 명확하고 이해할 수있는 문서를 찾을 수 없습니다 null)을 사용하여 UNION, INTERSECT 등의 누락 된 열을 대체 할 수 있습니다. 처음 몇 개의 프로젝트와 다음 쿼리를 위해 Oracle Database에서 빌드 된 HR 스키마를 사용하고 있습니다 (employee_id 번호 목록 만 얻습니다. 부양 가족과 함께있는 직원) :SQL 집합 연산자에서 to_char (null), to_number (null) 등을 사용하여 Oracle을 사용하는 경우

그러나 직원의 이름과 부양 가족의 생일을 포함하자마자 나는 막혔습니다. 이 변화는 에러없는 검색을 수행하지만 결과 (출력 "선택된 행이없는") 수득 아니오

SELECT e.employee_id "Employees with Dependents", 
    e.first_name, 
    e.last_name, 
    to_date(NULL) "Dependent Birthdate" 
FROM employees e 
INTERSECT 
SELECT d.relative_id, 
    TO_CHAR(NULL), 
    TO_CHAR(NULL), 
    d.birthdate 
FROM dependents d; 

여러 TO_NUMBER와 TO_DATE 대체 변형 또는 to_varchar2는 null 평범한 널 및 TO_CHAR 행을 생성하는 데 실패한다.

내가 만들고자하는 것은 후견인의 사원 번호, 이름, 성 및 생년월일을 표시하는 각 부양 가족에 대한 단일 행입니다. 내 문제는 이러한 null 자리 표시자를 사용하고 일반적으로 집합 연산자를 제한적으로 이해하고 있다는 것을 확신합니다. (내 이해는 to_date (null)과 같은 null 자리 표시자를 사용하면 비교할 항목이 없으므로 비교 대상에 포함되지 않습니다.)

누군가가 제게 올바른 사용법을 설명해 주시겠습니까? 이 자리 표시 자?

답변

0

쿼리가 작동하지 않는 이유는 해당 필드에 NULL 값이 없다는 것입니다. INTERSECT을 사용 중입니다. 사실, 당신이 함께 테이블을 조인하려면, 무엇인가 :

SELECT e.employee_id "Employees with Dependents", 
    e.first_name, 
    e.last_name, 
    d.birthdate "Dependent Birthdate" 
FROM employees e join 
    dependents d 
    on d.relative_id = e.employee_id 
+0

그래서 당신이 말하고있는 것은 교차, 노동 조합, 또는 마이너스에서 TO_DATE (null)와 같은 것을 사용하는 것이 비교의 일부로서 null 값에 대한 검색처럼 작동한다는 것입니다 어떤 칼럼에? 예를 들어, 출생일이없는 부양 가족을 기록상으로 검색합니까? –

+0

@ 트로이. . . 예. 실제로 '교차'연산은 거의 사용되지 않습니다. 'join '과'group by'에 대해 배우고 사용하는 것이 훨씬 더 유용 할 것입니다. –

+0

우리는 이것에 대해서도 배우고 있습니다. 그러나 그 재료는 매우 기술적입니다 ... 예가 교차로에서 가능한 것처럼 보입니다. 당신의 도움을 주셔서 감사합니다. 회원님의 제안을 통해 바로 저에게 다시 돌아 왔습니다! –

1

당신은합니다 (TO_CHAR 함수 또는 다른 변환 함수를 사용하여) 데이터 유형과 일치해야합니다 열 하나에 존재하거나 다른 테이블하지 않는 경우 . 예를 들어 :

SELECT location_id, department_name "부서", TO_CHAR (NULL) "창고 위치"부서 UNION SELECT location_id, TO_CHAR (NULL) "부서"위치에서 state_province ;

는 시나리오와 관련 보자