2014-09-30 99 views
0

如何解决此查询?在where子句中使用带CASE的别名列名称

Unknown column 'count_of_confirmed_rec' in 'where clause'

的MySQL查询:下面我错误地接收

SELECT 
(SELECT COUNT(a.col_1)FROM table_1 a 
JOIN table 2 b ON a.col_id= b.col_id) count_of_confirmed_rec, 
c.col_1, 
FROM table_3 c 
LEFT JOIN table_4 d ON c.col_id = d.col_id 
WHERE d.col_1 = 'value' 
AND c.col_1 = CASE count_of_confirmed_rec 
WHEN 0 THEN 0 ELSE 1 END 
+2

你可以在WHERE子句的SELECT字段中使用别名 – 2014-09-30 06:33:12

+0

这里更好的方法是将所有没有'case'条件的数据转储到临时表中,并使用'case'条件在简单的'select'中获取记录。 – Murtaza 2014-09-30 06:35:53

+0

除了使用临时表之外,没有其他方法可以修复查询吗? – jason 2014-09-30 06:42:23

回答

1

首先,你的计算count_of_confirmed_rec子查询不与外部查询相关;因此它会为查询的所有返回行提供相同的值。不知道这是你想不想的。

其次,您的条件d.col_1 = 'value'也看起来可能错位为左连接。

对于您的WHERE语句测试count_of_confirmed_rec的价值,你需要把一切都只是在一个子查询的WHERE语句,并适用于由查询(未经测试)返回的行的条件:

select count_of_confirmed_rec, c_col_1 from (
SELECT (SELECT COUNT(a.col_1)FROM table_1 a JOIN table 2 b ON a.col_id= b.col_id) count_of_confirmed_rec, c.col_1 as c_col_1 
FROM table_3 c LEFT JOIN table_4 d ON c.col_id = d.col_id 
WHERE d.col_1 = 'value' 
) SQ 
where c_col_1 = CASE count_of_confirmed_rec WHEN 0 THEN 0 ELSE 1 END