[英]MySQL IF statement on a calculated column
如何在SQL語句中使用計算列,該語句在“ Where”子句中使用“ IF”語句。
我的查詢在下面。 我不斷收到錯誤
Unknown column 'e_owner_id_church' in 'where clause'
SELECT idu,fname,lname,id_file,friendly_name,file_name,uploaded_by,date_uploaded,
file_last_modified,owner_id,
CASE WHEN owned_by='church' THEN church_name WHEN owned_by='user' THEN CONCAT(fname, ' ', lname) END AS e_owner_name,
CASE WHEN owned_by='church' THEN id_church END AS e_owner_id_church,
CASE WHEN owned_by='user' THEN idu END AS e_owner_id_user
FROM files,file_affiliations,churches,users
WHERE owner_id=IF(e_owner_id_church != null, e_owner_id_church, e_owner_id_user)
GROUP BY file_id
使用HAVING
子句可以解決此問題:
SELECT idu
, fname
, lname
, id_file
, friendly_name
, file_name
, uploaded_by
, date_uploaded
, file_last_modified
, owner_id
, CASE owned_by
WHEN 'church' THEN church_name
WHEN 'user' THEN CONCAT(fname, ' ', lname)
END AS e_owner_name
, CASE owned_by
WHEN 'church' THEN id_church
ELSE NULL
END AS e_owner_id_church
, CASE owned_by
WHEN 'user' THEN idu
ELSE NULL
END AS e_owner_id_user
FROM files
, file_affiliations
, churches
, users
GROUP BY file_id
HAVING owner_id = IFNULL(e_owner_id_church, e_owner_id_user)
我想警告您,該查詢不是標准的SQL,實際上,它選擇的字段既不包含在GROUP BY
子句中,也不包含在組函數的結果中。
最后,我認為可以將以上內容簡化如下:
SELECT idu
, fname
, lname
, id_file
, friendly_name
, file_name
, uploaded_by
, date_uploaded
, file_last_modified
, owner_id
, CASE owned_by
WHEN 'church' THEN church_name
WHEN 'user' THEN CONCAT(fname, ' ', lname)
ELSE NULL
END AS e_owner_name
, CASE owned_by
WHEN 'church' THEN id_church
WHEN 'user' THEN idu
END AS e_owner_id
FROM files
, file_affiliations
, churches
, users
GROUP BY file_id
HAVING owner_id = e_owner_id
沒有嘗試過,但是類似的東西應該起作用:
SELECT idu,fname,lname,id_file,friendly_name,file_name,uploaded_by,date_uploaded,
file_last_modified,owner_id,
CASE WHEN owned_by='church' THEN church_name WHEN owned_by='user' THEN CONCAT(fname, ' ', lname) END AS e_owner_name,
CASE WHEN owned_by='church' THEN id_church END AS e_owner_id_church,
CASE WHEN owned_by='user' THEN idu END AS e_owner_id_user
FROM files,file_affiliations,churches,users
GROUP BY file_id
HAVING owner_id = COALESCE(e_owner_id_church, e_owner_id_church, e_owner_id_user)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.