2013-11-21 120 views
0

好吧,所以我收到了我上週拿過的分級考試,那是使用Oracle Plus的SQL。我回答的兩個問題被標記爲錯誤,但我強烈認爲我是正確的,但他堅持認爲我的回答是錯誤的......所以我希望這裏有人能夠澄清我的答案是否正確!SQL腳本,我的腳本是否準確?

1)第一個問題說: 「顯示其沒有在2003年5月治療的狗IDS和那些名字」

所以使用之前創建的數據庫,被稱爲一個「狗」,另一個是命名爲「治療」。

填入值,這兩個表的狗表包括值的狗的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; 

但他說,這是錯誤的... 「 - 不了,這些都不是治療併購AY「

2.)我的第二個問題是 」找到所有曾接受過最低收養費的狗醫生。請注意,可能有不止一隻狗以最低的收養費通過。列出醫生的ID和狗ID。按升序醫生ID和每個醫生的狗IDS升序的順序排列的結果。」

因此,使用我們在考試前創建的其它表,一個名爲‘收養’‘vet_id’的屬性一個外鍵從表中稱爲獸醫引用vet_id和「dog_id」其它外鍵,並且還使用名爲「待遇」與屬性「vet_id」外鍵從表中引用vet_id另一個表叫做'vet','dog_id''treatment_fee'

*注 - '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 - 你的查詢返回 「所有的狗誰了那些不五月治療」,而不是「所有的狗,在五月沒有治療「。請注意,如果一隻狗在四月和五月都有治療,那隻狗會出現在您的查詢中。

問題#2 - 問題是詢問「領養費」,但您正在尋找最低的「治療費」。

+0

你是如此正確大聲笑我只是意識到這個錯誤,我的意思是把adop.fee不treatment.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

對於問題#1:

您當前JOIN機制不會列出沒有處理,因爲在dog.dog_id = treatment.dog_id條件不會列出沒有這樣的治療狗的狗。

你需要做的是專門找到在那個月有過治療的狗,並將它們從整體狗組中移除。您可能需要考慮這樣的子查詢:

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') 

對於問題2:

首先,我會記下,因爲你硬編碼的最低費用時,你應該動態地發現最低收費表格數據。我也想知道你是否將收養費和治療費混在一起。在下面的回答中,我假定在採用表中存在adop_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您是否要求在單個查詢中執行此操作?他注意到你應該使用收養費而不是治療費嗎?他注意到你沒有應用二級分類嗎? –