在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'
帖子的表结构具有帖子 ID、线程 ID 和标题字段。 我应该如何编写此查询?
(我见过按字段排序,仅当它存在时。 这个答案对我不起作用,因为我无法添加查询的早期部分"IFNULL(post.vote_count,0) 作为新投票计数"。
如果表中不存在字段(或作为查询中的别名),则不能在查询中使用字段
在 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';
裁判