好的,所以我上周接受了我的评分考试,即使用Oracle Plus的SQL考试。我回答的两个问题标记错了,但我强烈反对我是正确的,但他坚持认为我的答案是错的......所以我希望有人能澄清我的答案是否正确!
1。)第一个问题: “显示2003年5月未处理的狗ids和名字”
因此,使用以前创建的数据库,一个被称为'dog',另一个被命名为'treatment'。
注意两个表都填充了值狗表由狗id,名称等的值组成,治疗表由treatment_id组成,外键(dog_id)引用来自table dog的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;
但他说这是错的...... “ - 不,这些不是五月待遇”
2.)我的第二个问题是 “找到所有接受采用最低采用费用的狗的医生。请注意,可能有不止一只采用最低采用费的狗。列出医生的ids和狗ids。按医生的顺序排序结果按顺序为每位医生按顺序排序。“
因此,使用我们在考试前创建的其他表,一个名为'采用',其属性为'vet_id'一个外键,它引用一个名为vet的表中的vet_id和'dog_id'另一个外键;还使用另一个名为'treatment'的表,其中属性'vet_id'一个外键,它引用了一个名为'vet'的表中的vet_id,'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 :(得分: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;
答案 1 :(得分: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组,然后与那些为这些狗id进行治疗的兽医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
最重要的是,你的回答是错误的。
答案 2 :(得分:0)
问题#1 - 您的查询返回"所有在5月份没有接受治疗的狗,而不是#34;所有在5月份没有治疗的狗#34;请注意,如果一只狗在4月和5月都接受了治疗,那么这只狗就会显示在您的查询中。
问题#2 - 问题是询问"采用费",但是您正在查看最低的#34;治疗费"。