2012-10-11 30 views
0

我想创建一个包含计数的列,但问题是我重新使用子查询的位置,因为它以前创建的临时表变得不可用,因为它不再存在。存储子查询结果作为列别名重用

我的问题是我如何存储以前的子查询的结果,所以我可以稍后在同一个查询中运行一些结果?

首先用于计数我有:

CREATE TEMPORARY TABLE _temp_unique_entity_manufacturers 
      (
       entityId INT(11), 
       manufacturerRef INT(11), 
       manufacturerName VARCHAR(255), 
       KEY(entityId), 
       KEY(manufacturerRef) 
      ) 
      ENGINE=MEMORY AS 
       (SELECT DISTINCT entityRef AS entityId, manufacturer AS manufacturerRef, pm.name AS manufacturerName FROM enquiries, parts_trading, parts_manufacturers AS pm WHERE manufacturer = pm.id AND enquiryRef = enquiries.id) 

然后在我的主查询我这个表的工作,特别是这部分:

IF((SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) > 0, 
    (SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id), 
    0 
) AS manufacturers 

第二子查询失败,因为临时表是在这一点上走了。有没有一种方法,我不必一次又一次写出相同的子查询?

+0

'eo.id'来自哪里的子查询? –

回答

0
 case when 
     ((SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) > 0) then 
      (SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) else 
      0 end 
     ) AS manufacturers 
    -------------- 
    ex: 
    select coname,(case when cond then result else second result end) as user_colname from 
    tablename 
---------------------- 
If condition implement in sql as case when statement