Объединить строки для указания имени поля - PullRequest
3 голосов
/ 12 августа 2011

Использование MS SQL Server, но портирование на MySQL, поэтому мне нужно решение для обоих идеально (но предпочтительно для MySQL)

Я пытаюсь объединить два поля, чтобы указать имя поля для оператора select.

Пример таблицы:

id     | name
1      | John
2      | Bob


SELECT id, 'na'+'me' as value FROM table WHERE 1=1

фактический доход (конечно)

id     | value
1      | name
2      | name

ожидаемый доход:

id     | value
1      | John
2      | Bob

Понятия не имеюкак указать, что объединенный результат должен использоваться как имя поля, а не как результат.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Я смущен вашим вопросом, но запрос, который вам нужен для получения expected return, просто:

SELECT id, name as value FROM Table

Это будет работать как в MySQL, так и в SQL Server

UPDATE:

Мне только что пришло в голову, что вы, возможно, говорите об указании, какой столбец выбрать, используя объединенные значения. Для этого в SQL Server используется динамический SQL. Пример:

EXEC('SELECT id, ' + 'na' + 'me' + ' as value FROM table WHERE 1=1')

Вышесказанное было бы бессмысленно, если вы действительно планируете его использовать. Если na и me являются параметрами или чем-то подобным, это будет иметь смысл. Обязательно прочитайте эту статью перед использованием Dynamic SQL в SQL Server.

Версия MySQL:

mysql> set @sql_text := 'SELECT id, ' + 'na' + 'me' + ' as value FROM table WHERE 1=1';

mysql> prepare stmt from 
    -> @sql_text

mysql> EXECUTE stmt

Поднято с здесь .

0 голосов
/ 12 августа 2011

Похоже, вы пытаетесь динамически генерировать SQL с SQL?Если это так, используйте ваш SQL для генерации правильной команды SQL, а затем используйте команду EXEC.( документация MSDN для T-SQL EXEC )

DECLARE @SQL varchar(max)
SET @SQL = 'SELECT id, ' + 'na' + 'me' + ' as value FROM table WHERE 1=1'
EXEC (@SQL);

Если вам нужно сгенерировать данные, что-то вроде:

DECLARE @SQL varchar(max)
SELECT @SQL = 'SELECT id, ' + field1 + field2 + ' as value FROM table WHERE 1=1' FROM sometable WHERE 1=1
EXEC (@SQL);

Обычно это не рекомендуется для обеспечения безопасности,В зависимости от того, как вы получаете данные для генерации SQL, это может позволить атаки SQL-инъекций.Используйте с осторожностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...