我被要求:
为每种只在one type
天气下开花的植物打印以下列序列。
1.天气类型
1.工厂名称”
架构
- PLANTS(表格名)
- PLANT_NAME,字符串,工厂的名称。这是主键。
- PLANT_SPECIES,刺,植物的种类。
- SEED_DATE,日期,播种的日期。
- 天气(表名)
- PLANT_SPECIES,字符串,植物的种类。
- WEATHER_TYPE,字符串,植物开花的天气类型。
我写了下面的脚本,并测试了它对样本输入,并取得了预期的结果。我不知道这是否是什么被认为是一个'打印'的结果。
寻求对我可能错过的东西的理解。我如何才能使这个脚本“更有效”和/或“更好”和/或“更健壮”?
SELECT WEATHER.WEATHER_TYPE, a.PLANT_NAME
FROM (SELECT b.PLANT_NAME, b.PLANT_SPECIES
FROM (SELECT PLANTS.PLANT_NAME, PLANTS.PLANT_SPECIES, PLANTS.SEED_DATE, WEATHER.WEATHER_TYPE
FROM PLANTS JOIN WEATHER
ON PLANTS.PLANT_SPECIES = WEATHER.PLANT_SPECIES) b
GROUP BY b.PLANT_NAME, b.PLANT_SPECIES
HAVING count(*) = 1) a JOIN WEATHER
ON a.PLANT_SPECIES = WEATHER.PLANT_SPECIES
我在SQL Server Management Studio窗口中获得了预期的结果,但不确定它是否是提问者正在寻找的“打印”结果。
3条答案
按热度按时间ufj5ltwl1#
我个人认为与嵌套的“表表达式”相比,CTE更容易阅读和调试,就像您所做的那样。我会做如下操作:
mo49yndu2#
关于嵌套表表达式的可读性和调试的简易性,我不得不同意The Impaler的观点。作为CTE的另一个选择(这确实是更好的选择),如果你真的想嵌套东西而不想太多,你可以使用一个相关子查询。它更容易阅读,尽管随着结果集的增长,你会失去效率。
或者分组...
c7rzv4ha3#