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

时间:2016-07-07 14:38:43

标签: mysql variables subquery

像标题一样,我想从变量或选择语句中的where子句存储子查询的值。

我得到了这个声明很好的说法:

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);

正如你可能会重新命名它不是要完成任务,它将知道是否可以将子查询存储在变量或别名中以便在第二次在同一语句中使用它而不需要更多然后是一个陈述,或者是否有任何其他方式在陈述中多次使用价值。

Greetz thentt

1 个答案:

答案 0 :(得分:0)

我在研究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);