2013-11-21 4 views
0

오라클 플러스를 사용하여 SQL을 사용하여 지난 주에받은 성적 테스트를 받았습니다. 내가 대답 한 두 가지 질문은 잘못 표시되었지만 나는 틀렸다는 것을 강하게 느낀다. 그러나 그는 나의 대답이 틀렸다는 것을 주장하고있다. 그래서 나는 나의 대답이 정확한지 아닌지를 분명히 밝힐 수 있기를 바랐다.SQL 스크립트, 내 스크립트가 정확합니까?

1.) 첫 번째 질문은 말했다 : "2003 년 5 월 처리되지 않은 개 ID와 사람들의 이름을 표시"

그래서 이전에 만든 사용하여 데이터베이스, 하나는 '개'라고하고, 다른되고

했다 '처치'라 불렀다. 값 가득

두 테이블 개 테이블 등 개 아이디의 이름, 값으로 구성하고, 치료 테이블이 treatment_id 구성, 테이블 개에서 dog_id 참조하는 외래 키 (dog_id)

그래서 내 대답은 한 treatment_date과 몇 가지 다른 필드 ... : 그가 잘못했다

SELECT dog.dog_id, dog.name, treatment.treatment_date 
FROM dog, treatment 
WHERE treatment.treatment_date NOT BETWEEN '01-MAY-03' and '31-MAY-03' 
AND dog.dog_id = treatment.dog_id; 

하지만 ... 는 "--no, 이들은 M에 있지 취급 AY "

2) 두 번째 질문은 "가장 낮은 입양 수수료로 입양 한 개를 치료 한 의사를 모두 찾으십시오. 가장 낮은 입양 수수료로 채택 된 개가 둘 이상있을 수 있습니다. 의사의 ID와 개 ID를 나열하십시오. ". 오름차순으로 의사 IDS에 의해 오름차순 개 IDS에서 각 의사에 대한 결과를 주문

그래서 우리는 시험 이전에 생성 된 다른 테이블, 'vet_id'의 속성을 하나의 이름 '채택'를 사용하여 외국 테이블라는 수의사에서 vet_id를 참조 키를 다른 외래 키 'dog_id'; 또한 '치료'속성 'vet_id' 테이블에서 vet_id를 참조하는 외래 키와라는 이름의 또 다른 테이블을 사용하여 'dog_id''치료 수령'

* 참고 - 'treatment_fee' 15 ''이 시험에서 가장 낮은 값 또는 수수료이었다 '.

SELECT treatment.vet_id, adoption.dog_id 
FROM adoption, treatment 
WHERE adoption.dog_id = treatment.dog_id 
AND treatment.fee = '15' 
ORDER BY treatment.vet_id; 

그러나 그는 다시

그래서, 내가 도와 저에게이 상황에 대한 대답을 도울 수있는 누군가가 여기에 희망 ...이 잘못했다 :

내 답변했다.

답변

0

문제 # 1 - 귀하의 요청은 "월에없는 치료를 가진 모든 개"가 아닌 "모든 개 반환 5 월에 치료법이 없었어요. "개가 4 월과 5 월에 모두 치료를 받았다면 그 개가 귀하의 질문에 표시됩니다.

문제 # 2 - "입양 수수료"에 대해 질문하는 중, 가장 낮은 "치료비"를보고 있습니다. 질문 # 1

+0

당신은 너무 정확합니다. 나는 그 실수를 깨달았습니다. 나는 입양을 할 의향이있었습니다. 치료는하지 마세요 .fee !!! 와우 나는이 학년을 – user3018918

2

먼저 답 :

SELECT dog.dog_id, dog.name 
    FROM dog 
WHERE NOT EXISTS (SELECT treatment.id 
         FROM treatment 
        WHERE tratment.dog_id = dog.id 
         AND treatment.treatment_date BETWEEN '01-MAY-03' and '31-MAY-03' 
       ) 

두 번째 :

SELECT distinct treatment.vet_id, treatment.dog_id 
    FROM adoption, treatment 
WHERE adoption.dog_id = treatment.dog_id 
    AND dog.adoption_fee = (SELECT MIN(d2.adoption_fee) 
          FROM dog d2) 
ORDER BY treatment.vet_id, treatment.dog_id; 
2

:

당신 전류는 메커니즘이 dog.dog_id = treatment.dog_id 조건이 같은 치료를하지 않은 개를 나열하지 때문에 치료가없는 개를 나열하지 것이다 가입하세요.

당신이해야 할 일은 구체적으로 그 달에 치료를받은 개를 찾아 전체 개 세트에서 제거하는 것입니다. 당신이 하드 코딩 때문에 동적에서 최소 비용을 찾아야한다 때 아래로 표시 할 것입니다, 모든

먼저 최소 요금 : 질문 # 2의

SELECT dog_id 
FROM dog 
WHERE dog_id NOT IN (SELECT dog_id FROM treatment WHERE treatment_date BETWEEN '01-MAY-03' and '31-MAY-03') 

:이 같은 부속을 고려할 필요가 있습니다 테이블 데이터 또한 입양비와 치료비가 혼합되었는지 궁금합니다. 내 대답 아래에, adoption_fee 채택 테이블에 있다고 가정합니다. 또한 두 번째 정렬 조건을 구현하는 데 신경 쓰지 않았습니다.

당신은 다음을 입양 수수료, 다음 그 개 ID의

SELECT t.vet_id, a.dog_id 
FROM treatment AS t 
INNER JOIN 
(SELECT dog_id FROM adoption 
WHERE adoption_fee IN (SELECT MIN(adoption_fee) FROM adoption)) AS a 
ORDER BY t.vet_id ASC, a.dog_id ASC 

결론에 치료를 준 수의사 ID로 그 조인이 개 ID의 세트를 결정, 최소 입양 수수료를 결정해야 귀하의 답변이 잘못되었다는 사실이 맞습니다.

+0

두 번째 질문에 대한 자격이, 나는 가장 낮은 가격을 찾은 쿼리 위에 답변을 작성했다, 나는 내 질문에 이것을 포함하는 것을 잊었다. – user3018918

+0

@ user3018918 단일 쿼리에서 요청 했습니까? 그는 당신이 치료비 대신에 입양비를 사용해야한다고 언급 했습니까? 그는 당신이 두 번째 수준의 분류를 적용하지 않았다는 것에 주목 했습니까? –

관련 문제