在一条语句中多次使用子查询的结果

Using results of subquery more times in one statement

像标题一样,我想将来自 where 子句的子查询值存储在变量或 select 语句中。

我收到的声明很好用:

SELECT a.ticket_id, (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count FROM incidents a WHERE 7 < (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id);

在两个语句中:

SET @post =1;
SELECT a.ticket_id,@post FROM incidents a WHERE 5 < @post := (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id);

或者当然可以加入:

SELECT a.ticket_id,count(b.ticket_id) as count FROM incidents a JOIN im_data b ON a.ticket_id=b.ticket_id group by a.ticket_id having count(b.ticket_id) > 5

问题只是我想知道是否可以只用一个查询来做同样的事情。 我尝试以多种方式做到这一点,但不适用于 mysql:

SELECT a.ticket_id, (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count FROM incidents a WHERE 7 < count

SELECT a.ticket_id, count FROM incidents a WHERE 7 < (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count;

SELECT a.ticket_id, count FROM incidents a WHERE 7 < @a (SET @a = (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id);

正如您可能重新认识的那样,它不会完成任务,它即将知道是否可以将子查询存储在变量或别名中以便在同一语句中再次使用它而无需有不止一个陈述,或者有没有其他方法可以在一个陈述中多次使用价值。

你好

我在研究 Whosebug 上的一个问题时自己发现的 ;-)。

join (select @post := 1)

成功了。

SELECT a.ticket_id,@post FROM incidents a JOIN (SELECT @post := 1)  b WHERE 5 < @post := (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id);