2009-11-20 5 views
3

Есть ли способ заказать по столбцу, если он действительно существует?Заказ от IF EXISTS

т.е. SELECT * ORDER BY IF(EXISTS(order_column), order_column ASC, name_column DESC)

Спасибо!

+1

Что именно вы имеете в виду : Вы хотите проверить, существует ли столбец таблицы, или если он содержит значения? Обычно 'EXISTS' используется в сочетании с подзапросами, чтобы проверить, возвращает ли суб-запрос какие-либо записи. Если вы хотите проверить, существует ли фактический столбец, вы можете сделать это с помощью 'SHOW COLUMNS'. –

+3

и, пожалуйста, объясните, что вы подразумеваете под «если оно существует», если я принимаю буквальное значение, если столбец не существует, запрос не будет выполняться, но приведет к ошибке. Если вы имеете в виду «если значение в столбце не равно нулю», то, пожалуйста, отредактируйте свой вопрос, чтобы сказать это. –

+0

Я хочу проверить, действительно ли он существует. Извините за то, что я не понимаю. – Mission

ответ

2

Вы можете использовать ISNULL Вместо

ORDER BY 
    ISNULL(order_column, name_column) 

Не знаю, как вы бы добавить DESC или ASC Тхо ...

0

Нет, EXISTS должен быть использован только с подзапроса и в ИНЕКЕ , Может быть, вы более конкретны? Что вы подразумеваете под «существующей колонкой»?

1

Вот мое непроверенное предположение:

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

Если order_column является NULL, пустая строка будет заменена, которая не влияет на виде. Если это не NULL, оно будет отсортировано перед столбцом имени.

Если Mysql не позволит использовать выражение в ORDER BY, вы всегда можете создать «искусственный» столбец в SELECT:

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

Я придумал что-то подобное себе, но так как мне нужно сортировать по порядку_колонке, только если он действительно существует, это не сработает ... – Mission

+1

Один из нас плохо понимает. Можете ли вы привести нам пример некоторых возможных данных и результат, который вы ожидаете увидеть? –

0

Лучший способ сделать это создать выражение, оцените, существует ли это как часть запроса выбора. Вы можете иметь выражение обратный order_column или name_column

РЕАЛИЗАЦИЯ зависит от SQL, который вы используете, но здесь вы можете normallly нам IIF (...), но вы, возможно, потребуется проверить нуль