首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么select语句中的关联查询只返回一行

为什么select语句中的关联查询只返回一行
EN

Stack Overflow用户
提问于 2022-06-22 02:53:35
回答 2查看 35关注 0票数 0

有两张桌子:

  1. pp_job - PK,FK -> (jobset_id,jobset_id- PK,FK -> (jobset_id,job_id)

)

在对下面的pp_odate查询执行正常的select操作时,as返回多行。

代码语言:javascript
复制
SELECT automic_param 
 FROM pp_odate 
WHERE jobset_id = 'ABC' 
 AND job_id = 'cba1';

但是,如果它作为子查询包含在另一个select语句中,则只返回第一行。

代码语言:javascript
复制
SELECT (
 SELECT automic_param 
  FROM pp_odate 
 WHERE jobset_id = pp_job.jobset_id 
  AND job_id = pp_job.job_id
)
 FROM pp_job 
WHERE pp_job.jobset_id = 'ABC' 
 AND pp_job.job_id = 'cba1';

我不明白为什么会这样。这是相关查询的一个特性吗?是否有任何方法返回第2 select语句中的所有行。

EN

回答 2

Stack Overflow用户

发布于 2022-06-22 04:44:05

执行关联子查询的更正常的方法是首先说出您想从pp_odate中得到的内容,然后在Where子句中引用pp_job,如下所示:

代码语言:javascript
复制
SELECT automic_param 
FROM pp_odate od
WHERE (jobset_id, job_id) = (
    SELECT j.jobset_id, j.job_id
    FROM pp_job j
    WHERE j.jobset_id = 'ABC' 
      AND j.job_id = 'cba1'
    );

除了在这种情况下,这有点愚蠢,因为您在pp_job中引用的变量与pp_odate中的变量完全相同。假设pp_job查询返回了两个记录,都是('ABC','cba1');这相当于写Where (jobset_id, job_id) = (('ABC','cba1'),('ABC','cba1'))

这就像您的第一个查询,只是更慢!

还要注意,这甚至不是一个相关的子查询-它根本不引用pp_odate查询中的值。

就像肖恩在评论中说的,‘我认为你真的想加入这里’。

票数 0
EN

Stack Overflow用户

发布于 2022-06-22 05:34:01

子查询在标量上下文中使用,因此它只能返回单个行。任何其他的都会被丢弃(好吧,根本就不算)。

你需要这样的东西

代码语言:javascript
复制
SELECT pp_odate.automic_param 
FROM pp_odate 
JOIN pp_job ON pp_odate=jobset_id = pp_job.jobset_id 
           AND pp_odate.job_id = pp_job.job_id
WHERE pp_job.jobset_id = 'ABC' AND pp_job.job_id = 'cba1';

从中得到多行信息。

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

https://stackoverflow.com/questions/72709159

复制
相关文章

相似问题

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