2009-11-20 101 views
3

如果实际存在,是否有按列排序的方法?通过IF EXISTS订购

即:SELECT * ORDER BY IF(EXISTS(order_column), order_column ASC, name_column DESC)

谢谢!

+1

究竟是什么意思:你想检查表列是否存在,或者它是否包含值?通常'EXISTS'与子查询结合使用,以检查子查询是否返回任何记录。如果你想检查实际列是否存在,你可以用'SHOW COLUMNS'来做到这一点。 – 2009-11-20 08:52:25

+3

请解释“如果它存在”的含义,如果我采用字面意思,如果该列不存在,查询将不会运行,但会产生错误。如果你的意思是“如果列中的值不为空”,那么请编辑你的问题来说。 – 2009-11-20 08:52:37

+0

我想检查它是否真的存在。对不起,不清楚这一点。 – Mission 2009-11-20 09:08:25

回答

2

你可以使用ISNULL相反

ORDER BY 
    ISNULL(order_column, name_column) 

不知道如何你添加DESC或ASC寿...

0

不行,必须EXISTS只能使用子查询和WHERE子句中使用。你可以更具体吗? “现有专栏”是什么意思?

1

这是我的猜测未经测试:

ORDER BY IF(ISNULL(order_column), "", order_column) ASC, name_column DESC 

如果order_column为NULL,一个空字符串将被取代,这不会影响排序。如果它不是NULL,它将在名称列之前排序。

如果MySQL不会让你使用的ORDER BY表达式,你总是可以创建在选择“人工”列:要做到这一点,最好的办法

SELECT 
    IF (ISNULL(order_column), "  ", order_column) 
    AS my_order_column, 
    name_column 
FROM table 
ORDER BY my_order_column ASC, name_column DESC. 
+0

我已经想出了类似的东西,但由于我需要按order_column排序,只有当它实际存在时,这不会工作... – Mission 2009-11-20 09:29:19

+1

我们中的一个人是严重的误解。你能给我们一些可能的数据和你期望看到的结果吗? – 2009-11-20 12:22:44

0

是创建一个表达式评估是否存在作为选择查询的一部分。你可以有表达回归order_column或name_column

FPGA实现取决于你使用的是SQL,但在这里你可以normallly我们IIF(...),但你可能需要检查空