Mysql 将查询结果传递到子查询
我在上面的查询中遇到了一个问题,我想将每个警报传递到子查询中,这样我就有一个名为latest的列,该列显示每组警报的最新警报。我应该怎么做?这称为相关子查询。要使其正常工作,需要使用表别名:Mysql 将查询结果传递到子查询,mysql,sql,Mysql,Sql,我在上面的查询中遇到了一个问题,我想将每个警报传递到子查询中,这样我就有一个名为latest的列,该列显示每组警报的最新警报。我应该怎么做?这称为相关子查询。要使其正常工作,需要使用表别名: SELECT alert, (select created_at from alerts WHERE alert = @ALERT ORDER BY created_at desc LIMIT 1) AS latest FROM alerts GROUP BY alert;
SELECT alert,
(select created_at from alerts
WHERE alert = @ALERT ORDER BY created_at desc LIMIT 1)
AS latest FROM alerts GROUP BY alert;
表别名是一个好习惯,因为它们通常使SQL更具可读性。在列引用中使用表别名也是一个好主意,这样您就可以很容易地知道列的来源
编辑:
如果您确实想要最新版本,只需执行以下操作即可获得:
SELECT a1.alert,
(select a2.created_at
from alerts a2
WHERE a2.alert = a1.alert
ORDER BY a2.created_at desc
LIMIT 1
) AS latest
FROM alerts a1
GROUP BY a1.alert;
这称为相关子查询。要使其正常工作,需要使用表别名:
SELECT alert,
(select created_at from alerts
WHERE alert = @ALERT ORDER BY created_at desc LIMIT 1)
AS latest FROM alerts GROUP BY alert;
表别名是一个好习惯,因为它们通常使SQL更具可读性。在列引用中使用表别名也是一个好主意,这样您就可以很容易地知道列的来源
编辑:
如果您确实想要最新版本,只需执行以下操作即可获得:
SELECT a1.alert,
(select a2.created_at
from alerts a2
WHERE a2.alert = a1.alert
ORDER BY a2.created_at desc
LIMIT 1
) AS latest
FROM alerts a1
GROUP BY a1.alert;
我会做下面的事情
select alert, max(created_at)
from alerts
group by alert;
我会做下面的事情
select alert, max(created_at)
from alerts
group by alert;
如果您试图获取每组警报的最新创建日期,有一种更简单的方法
SELECT
alert_group_name,
MAX(created_at) AS latest
FROM
alerts A
GROUP BY
alert_group_name;
如果您试图获取每组警报的最新创建日期,有一种更简单的方法
SELECT
alert_group_name,
MAX(created_at) AS latest
FROM
alerts A
GROUP BY
alert_group_name;
对于相关子查询,需要引用外部查询中的表达式 最好的方法是在外部查询中将别名分配给表,然后在内部查询中引用该别名。最佳实践是为每个表引用指定一个别名,并限定每个列引用 要“修复”查询,只需将对“
@ALERT
”的引用替换为外部查询表中对ALERT
列的引用
在我们的商店中,该语句的格式如下:
SELECT
alert,
max (created_at) AS latest
FROM
alerts
GROUP BY
alert;
不是因为这样写更容易,而是更重要的是更容易阅读和理解陈述的内容
相关子查询方法对于返回的少量行(最外层查询上非常严格的WHERE子句)是有效的。但是,一般来说,SELECT列表中的相关子查询可以使LDQ(我们在商店中所指的)成为“调光查询”
在我们的商店中,如果我们需要该查询返回的结果集,则该语句可能会重写为:
SELECT a.alert
, (SELECT l.created_at
FROM alerts l
WHERE l.alert = a.alert
ORDER BY l.created_at DESC
LIMIT 1
) AS latest
FROM alerts a
GROUP
BY a.alert
我们肯定会在警报上定义一个索引(警报,创建时间)
(或者在前两个之后有一个附加列的索引)
大小,我们
(我不认为该语句会返回不同的结果。)对于相关子查询,您需要引用外部查询中的表达式 最好的方法是在外部查询中将别名分配给表,然后在内部查询中引用该别名。最佳实践是为每个表引用指定一个别名,并限定每个列引用 要“修复”查询,只需将对“
@ALERT
”的引用替换为外部查询表中对ALERT
列的引用
在我们的商店中,该语句的格式如下:
SELECT
alert,
max (created_at) AS latest
FROM
alerts
GROUP BY
alert;
不是因为这样写更容易,而是更重要的是更容易阅读和理解陈述的内容
相关子查询方法对于返回的少量行(最外层查询上非常严格的WHERE子句)是有效的。但是,一般来说,SELECT列表中的相关子查询可以使LDQ(我们在商店中所指的)成为“调光查询”
在我们的商店中,如果我们需要该查询返回的结果集,则该语句可能会重写为:
SELECT a.alert
, (SELECT l.created_at
FROM alerts l
WHERE l.alert = a.alert
ORDER BY l.created_at DESC
LIMIT 1
) AS latest
FROM alerts a
GROUP
BY a.alert
我们肯定会在警报上定义一个索引(警报,创建时间)
(或者在前两个之后有一个附加列的索引)
大小,我们
(我不认为此语句会返回不同的结果。)很高兴知道。谢谢,很高兴知道。非常感谢。