是的,这是一个作业,我需要一些指针。
我正在尝试编写一个SQL查询来列出在任何时候种植的每种蔬菜的veg_id、年份和年产量。以下内容在Oracle 11g中不起作用。有人能帮上忙吗?
这些表包括:
**PLOT**
plot#
gard_code#*
owner_id*
location
rent_code*
shed
water_supply
**Plot Usage**
plot#*
veg_id*
year
yield我的尝试是:
SELECT veg_id, year, yield
FROM plot_usage
WHERE EXISTS
(
SELECT plot#
FROM plot
WHERE plot_usage.plot# = plot.plot#
)
ORDER BY veg_id ASC;发布于 2014-03-15 00:12:04
您可能忘记了第二个select中的表plot_usage
SELECT veg_id, year, yield
FROM plot_usage
WHERE EXISTS
(
SELECT plot#
FROM plot, plot_usage
WHERE plot_usage.plot# = plot.plot#
)
ORDER BY veg_id ASC;发布于 2014-03-15 00:38:23
您在这里没有提供足够的关于模式设计的信息,因此我将研究可能的解决方案。
plot_usage.plot#是plot.plot#的外键。在这种情况下,plot_usage中的所有条目在plot表中都有一个对应的父记录,我们可以认为它们是有效的。在这里,您可以对plot表使用INNER JOIN,但只要不需要该表中的任何列(似乎也不需要),就不需要这样做。没有它,你的查询会更快。所以一个非常简单的
从plot_usage中选择veg_id、年份、收益率;
will do.
plot_usage与plot无关。在这种情况下,您可能拥有不属于正确数据的记录,因此您可能希望排除它们。在这种情况下,使用INNER JOIN,如下所示:SELECT veg_id,year,year FROM plot_usage内连接图使用(plot#);
现在,您提到的条件(“在任何时候”)意味着您不需要过滤数据。我假设,plot_usage包含根据在其他地方找到的一些详细信息预先计算的年度聚合。
https://stackoverflow.com/questions/22410128
复制相似问题