2009-11-20 181 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(...),但你可能需要檢查空