在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) as newvotecount“。)
发布于 2014-11-16 19:24:24
如果表中不存在字段(或作为查询中的别名),则不能在查询中使用该字段
发布于 2014-11-16 19:43:02
在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;将Oracle系统表替换为Mysql系统表的方法与此相同
对于Mysql:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';https://stackoverflow.com/questions/26956329
复制相似问题