2014-09-30 104 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