首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当字段存在时,MySQL ORDER BY字段

问仅当字段存在时,MySQL ORDER BY字段
EN

Stack Overflow用户
提问于 2014-11-16 19:16:57
回答 2查看 1.1K关注 0票数 0

在MySQL中,如果某个字段在表中以列的形式存在,我希望按该字段排序。如果该字段不存在,我希望查询忽略查询的该部分。如果我尝试像这样的东西

代码语言:javascript
复制
SELECT
    post.*
FROM post AS post
WHERE post.postid IN (9818,9814,9815)
ORDER BY IFNULL(post.vote_count,0) > 5 DESC;

在我的查询结束时,我得到了错误:

代码语言:javascript
复制
#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“。)

EN

回答 2

Stack Overflow用户

发布于 2014-11-16 19:24:24

如果表中不存在字段(或作为查询中的别名),则不能在查询中使用该字段

票数 -2
EN

Stack Overflow用户

发布于 2014-11-16 19:43:02

在Oracle中,您可以使用以下命令来完成此操作

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('columnA','ColumnB')

    AND TABLE_SCHEMA='YourDatabase';

Ref

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26956329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档