就像标题一样,我想将 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);
正如您可能认为的那样,它并不打算完成任务,而是要了解是否可以将子查询存储在变量或别名中,以便在同一个语句中再次使用它,而无需更多然后是一个语句,或者是否有任何其他方法可以在一个语句中多次使用值。
格雷兹·森特
最佳答案
我在研究 stackoverflow 上的问题时自己发现了它;-)。
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);
关于mysql - 在一条语句中多次使用子查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248351/