SQL基础知识 - WHERE EXISTS

时间:2014-03-14 16:02:31

标签: sql oracle oracle11g

是的,这是一项任务,我需要指点。

我正在尝试编写一个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;

2 个答案:

答案 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)

您在此处提供的架构设计信息不足,因此我将研究可能的解决方案。

  1. plot_usage.plot#plot.plot#的外键。在这种情况下,plot_usage中的所有条目在plot表中都有相应的父记录,我们可以将它们视为有效表。

    在这里,您可以将INNER JOINplot表一起使用,但只要您不需要该表中的任何列(并且您似乎没有),就不需要它。没有它,您的查询会更快。所以非常简单

    SELECT veg_id, year, yield FROM plot_usage;
    

    会做。

  2. plot_usageplot无关。在这种情况下,您可以将所属的记录添加到正确的数据中,因此您可能希望将它们排除在外。在这种情况下,请使用INNER JOIN,例如:

    SELECT veg_id, year, yield FROM plot_usage INNER JOIN plot USING (plot#);
    
  3. 现在,您提到的条件(“随时”)意味着您不需要过滤数据。我假设,plot_usage包含基于其他地方的一些详细信息预先计算的年度总量。