gpt4 book ai didi

sql - 在同一张表上使用子查询在 MySQL 中编写 sql 查询

转载 作者:可可西里 更新时间:2023-11-01 07:42:52 27 4
gpt4 key购买 nike

我有一张表 svn1:

id | date | startdate

23 2002-12-04 2000-11-11
23 2004-08-19 2005-09-10
23 2002-09-09 2004-08-23

select id,startdate from svn1 where startdate>=(select max(date) from svn1 where id=svn1.id);

现在的问题是我如何让子查询将 id 与外部查询中的 id 匹配。显然 id=svn1.id 不会工作。谢谢!

If you have the time to read more:

这实际上是询问我在这里真正想做什么的简化版本。我的实际查询是这样的

    select 
id, count(distinct archdetails.compname)
from
svn1,svn3,archdetails
where
svn1.name='ant'
and svn3.name='ant'
and archdetails.name='ant'
and type='Bug'
and svn1.revno=svn3.revno
and svn3.compname=archdetails.compname
and
(
(startdate>=sdate and startdate<=edate)
or
(
sdate<=(select max(date) from svn1 where type='Bug' and id=svn1.id)
and
edate>=(select max(date) from svn1 where type='Bug' and id=svn1.id)
)
or
(
sdate>=startdate
and
edate<=(select max(date) from svn1 where type='Bug' and id=svn1.id)
)
)
group by id LIMIT 0,40;

如您所见,select max(date) from svn1 where type='Bug' and id=svn1.id 必须计算多次。

我可以只计算一次并使用 AS 存储它,然后稍后使用该变量吗?主要问题是更正 id=svn1.id 以便正确地将其等同于外表中的 id。

最佳答案

我不确定是否可以消除子查询的重复,但是如果使用表别名,子查询可以引用主查询,如下所示:

select id,
count(distinct archdetails.compname)
from svn1 s1,
svn3 s3,
archdetails a
where s1.name='ant' and
s3.name='ant' and
a.name='ant' and
type='Bug' and
s1.revno=s3.revno and
s3.compname = a.compname and
( (startdate >= sdate and startdate<=edate) or
(sdate <= (select max(date)
from svn1
where type='Bug' and
id=s1.id and
edate>=(select max(date)
from svn1
where type='Bug' and
id=s1.id)) or
(sdate >= startdate and edate<=(select max(date)
from svn1
where type='Bug' and
id=s1.id)) )
group by id LIMIT 0,40;

分享和享受。

关于sql - 在同一张表上使用子查询在 MySQL 中编写 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com