Оператор AS. Псевдонимы в SQL
Псевдонимы используется для предоставления столбцов или таблиц с именем отличным от оригинала, то есть, вы можете переименовать столбец при выборке в любое удобное для вас имя.
Для создания псевдонимов используется оператор AS.
Практический пример
В вашей таблице Users есть столбец first_middle_last_name, который содержит в себе полное имя пользователя. У данного столбца очень длинное имя, и есть использовать не очень удобно. Поэтому его можно просто переименовать в более короткое и понятное имя: например, в name_user
SELECT first_middle_last_name AS 'name_user' FROM Users;
Зачем такие сложности в не нужных действиях? это только путает новичка зачем создавать копию таблицы?
что бы в ней и запутаться?
Здесь создаётся не копия таблицы, а псевдоним для столбца таблицы
на основании данных из другой таблицы, при помощи AS создаю новый столбец, но не могу теперь к нему обратиться, чтоб проверить не одинаковые ли данные в этом столбце с другим столбцом(
Какую СУБД используете? Пришлите текст вашего запроса в комментарии ниже, посмотрим на него.
Весь запрос приводить не буду очень длинный, приведу кусочек:
COALESCE(
(
SELECT TOP 1 ‘+7 (‘ + p.[Phone Code] + ‘) ‘ + LEFT(p.[Phone Number],3) + ‘-‘ + SUBSTRING(p.[Phone Number],4,2) + ‘-‘ + RIGHT(p.[Phone Number],2)
FROM [trance FC`$Phone] p
WHERE p.[Employee No_]=e.No_ AND p.[Default]=’1’ AND p.[Phone Number] »
),
e.[Mobile Phone No_]
) AS [MobileNo_],
CASE
WHEN e.[Mobile Phone No_] = e.[MobileNo_] THEN »
ELSE e.[Mobile Phone No_]
END AS [MobilePhoneNo_],
CASE
WHEN e.[Mobile Phone No_] = e.[Home Phone No_] OR e.[Home Phone No_] = e.[MobileNo_] THEN »
ELSE e.[Home Phone No_]
END AS [HomePhoneNo_],
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = «Server=$SqlServer; Database=$SqlCatalog; Trusted_Connection=True;»
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sql
$SqlCmd.Connection = $SqlConnection
$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $SqlCmd
$Dataset = new-object System.Data.Dataset
write-output $DataAdapter.Fill($Dataset) | Out-Null
Тут выскакивает ошибка:
Исключение при вызове «Fill» с «1» аргументами: «Incorrect syntax near the keyword ‘WHEN’.
Incorrect syntax near ‘,’.»
строка:1 знак:1
+ write-output $DataAdapter.Fill($Dataset) | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
Посмотрел бегло запрос, ругается на конструкцию WHEN. И сразу можно выделить ошибку, когда у вас отрабатывает конструкция WHEN, должен выполниться блок THEN, а в этом блоке должно быть указано значение. В вашем случае это символ », и он строчный. Строчные символы необходимо заключать в кавычки.
CASE
WHEN e.[Mobile Phone No_] = e.[MobileNo_] THEN »
ELSE e.[Mobile Phone No_]
END AS [MobilePhoneNo_],
Прошу прощения, такая ошибка:
Исключение при вызове «Fill» с «1» аргументами: «Invalid column name ‘MobileNo_’.
Invalid column name ‘MobileNo_’.»
строка:1 знак:1
+ write-output $DataAdapter.Fill($Dataset) | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
Эта ошибка указывает на некорректное имя столбца в таблице. Проверьте правильность имени столбца, если имя правильное, необходимо посмотреть полный запрос , как и когда определяется псевдоним для таблицы.
Псевдоним определяется так:
COALESCE(
(
SELECT TOP 1 ‘+7 (‘ + p.[Phone Code] + ‘) ‘ + LEFT(p.[Phone Number],3) + ‘-‘ + SUBSTRING(p.[Phone Number],4,2) + ‘-‘ + RIGHT(p.[Phone Number],2)
FROM [trance FC`$Phone] p
WHERE p.[Employee No_]=e.No_ AND p.[Default]=’1’ AND p.[Phone Number] »
),
e.[Mobile Phone No_]
) AS [MobileNo_],
*псевдоним для таблицы
FROM [trance FC`$Employee] e
Пробовал делать так:
CASE
WHEN e.[Mobile Phone No_] = MobileNo_ THEN »
ELSE e.[Mobile Phone No_]
END AS [MobilePhoneNo_],
Все равно такая же ошибка получается
Пришлите полный текст запроса на электронную почту, необходимо его изучить.
Отправил и после отправки понял, что хотя бы одну строку нужно было удалить)))
То есть проблема решена или мне продолжать смотреть ваш запрос?
Не решена, просто в той строчке понятно в какой компании я работаю)))
Да ничего страшного :)
Мне потребуется время, чтобы разобрать ваш запрос