首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL基础知识-存在的地方

SQL基础知识-存在的地方
EN

Stack Overflow用户
提问于 2014-03-15 00:02:31
回答 2查看 114关注 0票数 0

是的,这是一个作业,我需要一些指针。

我正在尝试编写一个SQL查询来列出在任何时候种植的每种蔬菜的veg_id、年份和年产量。以下内容在Oracle 11g中不起作用。有人能帮上忙吗?

这些表包括:

代码语言:javascript
运行
复制
**PLOT**
plot#
gard_code#*
owner_id*
location
rent_code*
shed
water_supply

**Plot Usage**
plot#*
veg_id*
year
yield

我的尝试是:

代码语言:javascript
运行
复制
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;
EN

回答 2

Stack Overflow用户

发布于 2014-03-15 00:12:04

您可能忘记了第二个select中的表plot_usage

代码语言:javascript
运行
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2014-03-15 00:38:23

您在这里没有提供足够的关于模式设计的信息,因此我将研究可能的解决方案。

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

在这里,您可以对plot表使用INNER JOIN,但只要不需要该表中的任何列(似乎也不需要),就不需要这样做。没有它,你的查询会更快。所以一个非常简单的

从plot_usage中选择veg_id、年份、收益率;

will do.

  • plot_usageplot无关。在这种情况下,您可能拥有不属于正确数据的记录,因此您可能希望排除它们。在这种情况下,使用INNER JOIN,如下所示:

SELECT veg_id,year,year FROM plot_usage内连接图使用(plot#);

现在,您提到的条件(“在任何时候”)意味着您不需要过滤数据。我假设,plot_usage包含根据在其他地方找到的一些详细信息预先计算的年度聚合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22410128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档