在MySQL中,如果该字段作为表中的列存在,我希望按字段排序。如果该字段不存在,我希望查询忽略该查询段。如果我尝试像
那样的话SELECT
post.*
FROM post AS post
WHERE post.postid IN (9818,9814,9815)
ORDER BY IFNULL(post.vote_count,0) > 5 DESC;
在我的查询结束时收到错误:
#1054 - Unknown column 'post.vote_count' in 'order clause'
post的表结构有postid,threadid和title字段。我该怎么写这个查询?
(我已经看过Ordering by a field, only if it exists。这个答案对我不起作用,因为我无法添加查询的前一部分," IFNULL(post.vote_count) ,0)作为newvotecount"。)
答案 0 :(得分:-2)
如果表中不存在字段(或查询中的别名),则不能在查询中使用字段
答案 1 :(得分:-2)
在Oracle中,您可以使用以下
来完成此操作 SELECT * FROM table_name
ORDER BY CASE WHEN EXISTS (select 1
FROM ALL_TAB_COLUMNS
WHERE lower(column_name) IN lower('column1_name') AND lower(table_name) = lower('table_name')) THEN column1_name
ELSE column2_name
END;
使用Mysql系统表替换Oracle System表
对于Mysql:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';