2009-09-23 2 views
2

Мне было интересно, если что-то подобное было возможно:SQL встроенный условный Select

SELECT name or alt_name FROM users Where userid=somenum 

Я также попытался это:

SELECT name IF NOT NULL ELSE alt_name ... 

Если у кого есть какие-либо понять, я ценю это.

+0

Спасибо, по какой-то причине, сеть здесь, когда время работы отключается, когда я пытаюсь задать вопрос, поэтому мне пришлось набирать его на моем iPhone ... –

+0

То есть, сеть заставляет страницу простоять ... лол –

ответ

7

Если вы пытаетесь затем заменить аннулирует

select coalesce(name,alt_name).... 

он будет возвращать первый не нулевое значение

0

Не самый эффективный ответ, но что об этом:

SELECT name FROM users WHERE userid=somenum AND name IS NOT NULL 
UNION 
SELECT altname FROM users WHERE userid=somenum AND name IS NULL 

Я думаю, что это будет производить то, что вы после этого.

0

Если вы используете базу данных, которая поддерживает их, то один из самых простых способов является использование пользователем определенная функция, вы бы затем

SELECT udfPreferredName() FROM users 

где udfPreferredName() бы инкапсулировать логику, необходимую для выбора между именем и alternative_name полей.

Одним из преимуществ использования функции является то, что вы можете абстрагироваться от логики выбора и применять ее в нескольких операциях SQL везде, где вам это нужно. Выполнение логики inline с использованием футляра прекрасно, но обычно будет (намного) сложнее поддерживать систему. В большинстве RDBMS дополнительные накладные расходы на вызов функции не будет значительным, если вы не обрабатываются очень большие таблицы

0

ВЫБОР КОРПУСА ПРИ Идентификатор_пользователя = somenum ТОГДА имя ELSE alt_name END от пользователей

1

ли вы имеете в виду что-то как это? Я принимаю TSQL

SELECT CASE WHEN [name] IS NOT NULL THEN [name] ELSE [alt_name] END AS [UserName] 
FROM [Users] WHERE [UserId] = somenum 
2

Как насчет этого?

SELECT IsNull(name, alt_name) FROM users Where userid=somenum 

Его сходный с функцией Coalesce, но он принимает только два аргумента и проще произнести заклинание.

Смежные вопросы