是的,这是一项任务,我需要指点。
我正在尝试编写一个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;
答案 0 :(得分:0)
您可能已忘记第二个plot_usage
select
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;
答案 1 :(得分:0)
您在此处提供的架构设计信息不足,因此我将研究可能的解决方案。
plot_usage.plot#
是plot.plot#
的外键。在这种情况下,plot_usage
中的所有条目在plot
表中都有相应的父记录,我们可以将它们视为有效表。
在这里,您可以将INNER JOIN
与plot
表一起使用,但只要您不需要该表中的任何列(并且您似乎没有),就不需要它。没有它,您的查询会更快。所以非常简单
SELECT veg_id, year, yield FROM plot_usage;
会做。
plot_usage
与plot
无关。在这种情况下,您可以将所属的记录添加到正确的数据中,因此您可能希望将它们排除在外。在这种情况下,请使用INNER JOIN
,例如:
SELECT veg_id, year, yield FROM plot_usage INNER JOIN plot USING (plot#);
现在,您提到的条件(“随时”)意味着您不需要过滤数据。我假设,plot_usage
包含基于其他地方的一些详细信息预先计算的年度总量。