Ошибка неоднозначное имя столбца

As you know, if we select two tables whereas we have the same column name, we get the error:

‘Ambiguous column name ‘ColumnName»

I already know that setting the alias does fix this issue.

However, it seems if the name of the column is not in the SELECT statement, then it works for SQL Server 2008 R2 (on my database). Compatibility-Level is set to 100.

So the following statement DOES work:

SELECT t1.ID
FROM Table1 t1 
JOIN Table2 t2 ON (t2.ID = t1.ID) 
ORDER BY ID

But apparently in other circumstances the above statement does return an error (I know this because it happened at the customer’s site). Also on SQL Fiddle it returns the error both on SQL Server 2008 and SQL Server 2012.

Does anybody know why or in which circumstances the above query still returns the error?

My guess is that it’s a matter of version or settings on the SQL Server.

Note: The linked duplicate did solve my problem. Compatibility level was set to 80. Changing it to 100 solved the problem.

Дайте таблицам псевдоним

Иногда вам может потребоваться объединить две таблицы в SQL, и в таблицах есть столбцы с одинаковыми именами.

В этом случае, если вы объедините две таблицы и запустите запрос, не различая имена одинаковых столбцов, вам будет видна ошибка «Столбец с неоднозначным именем».

Как решить эту проблему?

Простой.

Есть несколько способов исправить ошибку «столбец неоднозначного имени». Один из простейших способов ее решения описан ниже.

Как устранить ошибку «столбец неоднозначного имени» в SQL

Например, вы хотите объединить две таблицы с именами TABLE1 и TABLE2. ТАБЛИЦА 1 содержит эти столбцы — EmployeeID, Name, Salary. В ТАБЛИЦЕ 2 есть эти столбцы — EmployeeID, Name, Age.

Во-первых, давайте создадим таблицы.

Обратите внимание, что две таблицы имеют общий столбец «Имя», кроме EmployeeID, который всегда является числом.

А теперь давайте присоединимся к столам. Выполните запрос ниже:

Если вы запустите вышеуказанный запрос, вы получите эту ошибку — «Столбец с неоднозначным именем».

Это означает, что два столбца имеют одинаковое имя столбца — это столбец «Имя». Машина SQL не понимает, какое «Имя» из двух таблиц вы имеете в виду. Это неоднозначно — непонятно.

Чтобы прояснить это, добавьте псевдоним одной или обеих таблиц TABLE1 или TABLE2 к столбцам с одинаковыми именами. Вы заметили выше, что псевдоним TABLE1 — A, а псевдоним TABLE2 — B.

Итак, давайте исправим ошибку.

Запустите запрос. Нет ошибки!

Вы можете пойти дальше, определив, какое «Имя» попадает в ТАБЛИЦУ2, написав свой запрос следующим образом:

Заключение

Вы можете давать столбцам с одинаковыми именами разные имена. Это может затруднить идентификацию содержимого столбца. Название столбца должно описывать содержимое столбца.

Один из простейших способов решить ошибку «столбца с неоднозначным именем» — без изменения имени столбца — это дать таблицам, к которым вы хотите присоединиться, псевдоним. Это отправляет четкую информацию на SQL-машину, столбцы разные.

Удачных запросов.

Спасибо за ваше время.

Когда вы объединяете несколько таблиц в SQL-запросе, если столбец с одинаковым именем присутствует в обеих таблицах, то BigQuery не знает, какой из них использовать (если вы явно не скажете об этом), поэтому он выдает ошибку с неоднозначным именем столбца.

Редактор Bigquery WebUI достаточно умен, чтобы выделить точную строку, в которой присутствует неоднозначный столбец (обратите внимание на красное восклицание на полях редактора sql). Решение может быть в одном из приведенных ниже методов:

Убедитесь, что в списке выбора нет неоднозначных имен столбцов:

select Id, Name, Description
from table1 t1 
join table2 t2
on t2.Id = t1.Id;

В этом примере Идентификатор имени столбца присутствует в обеих таблицах, t1 и t2. Вы можете прояснить это, разметив столбцы, как показано ниже:

select t1.Id, t1.Name, t2.Description
from table1 t1 
join table2 t2
on t2.Id = t1.Id;

Убедитесь, что предложение Where / Join не имеет двусмысленных имен столбцов:

select t1.Id, t1.Name, t2.Description
from table1 t1 
join table2 t2
 on t2.Id = t1.Id
Where Id = 100;

В этом примере, поскольку идентификатор присутствует в обеих таблицах, создайте псевдоним столбца, как показано ниже:

select t1.Id, t1.Name, t2.Description
from table1 t1 
join table2 t2
 on t2.Id = t1.Id
Where t1.Id = 100;

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный синтаксис Join:

select table1.* 
from table1,
 table2,
 table3
where table1.Id = table2.Id;

Использование запятых для Join(соединений) может сбивать с толку, приводить к ошибкам и данный метод имеет меньшую читабельность. Всегда старайтесь использовать явное объединение и явные столбцы объединения. Это значительно сократит количество ошибок, а также упростит работу по устранению неполадок

Неоднозначное имя столбца



У меня есть следующий SQL, и он выдает ошибку неоднозначное имя столбца ‘ id ‘

select tbl_registration.*, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id
from tbl_registration
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id
left outer join tbl_users on tbl_registration.email = tbl_users.username
where id = [PARAM]p_id

Я прочитал несколько статей об этом, но не могу найти рабочего решения для моего кода.
Любая помощь очень ценится.


665  


5  

5 ответов:

Ваш идентификатор предложения WHERE должен быть более конкретным, включая имя таблицы:

WHERE table.id = [PARAM]p_id

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

SQL обладает интеллектом для устранения неоднозначности имен столбцов, если имя столбца уникально в текущем наборе таблиц, к которым прикасаются, — следовательно, в большинстве случаев вам не нужно префиксировать имена столбцов именами таблиц.

Скорее всего, несколько таблиц имеют столбец с именем id; используйте префикс таблицы в предложении where

Вы пробовали добавить префикс имени столбца id в предложении where?

Это относится к » id » в вашем предложении where. Вам нужно указать, какой «id» таблицы он должен фильтровать.

Я заменил ваш код

select *, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id
from tbl_registration
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id
left outer join tbl_users on tbl_registration.email = tbl_users.username
where your_respective_tblname.id = your_respective_tblname.[PARAM]p_id

[] 1

CREATE VIEW planView  
    SELECT 
        planID, planName, cost, quota, maxSpeed, shapedSpeed, typeID, typeName  
    FROM 
        Plans AS p 
    LEFT OUTER JOIN 
        accessType AS a ON p.typeID = a.typeID;  
GO  

Это продолжает выдавать мне сообщение об ошибке, я пытался сделать два typeID равными друг другу, но все равно ничего

3 ответа

Лучший ответ

У вас есть общий столбец в ваших таблицах. Это неоднозначно для SQL Server, потому что он не знает, к какой таблице принадлежит этот столбец.

Например, если у вас есть cost как в plan, так и в accessType таблице, то вы не понимаете, что должно возвращаться — plan.cost или accessType.cost?

< Сильный > Решение:

Перейти к вашей select строке

SELECT planID, planName, cost, quota, maxSpeed, shapedSpeed, typeID, typeName 

И укажите имя таблицы с помощью оператора .

Я думаю, что проблема исходит от

typeID

В select, потому что вы использовали Left outer join, поэтому значения typeID в обеих таблицах не всегда одинаковы.


3

marc_s
1 Ноя 2017 в 05:49

Вы можете написать так:

CREATE VIEW planView  
    SELECT 
        planID, planName, cost, quota, maxSpeed, shapedSpeed, a.typeID, typeName  
    FROM 
        Plans AS p 
    LEFT OUTER JOIN 
        accessType AS a ON p.typeID = a.typeID;  
GO 


2

Md. Suman Kabir
1 Ноя 2017 в 05:53

CREATE VIEW planView  
SELECT p.planID, p.planName, p.cost, p.quota, p.maxSpeed, p.shapedSpeed, a.typeID, a.typeName  
FROM Plans AS p LEFT OUTER JOIN accessType AS a  
ON p.typeID = a.typeID;  
GO

Ваш запрос должен быть таким.


-1

Muhammad Hannan
1 Ноя 2017 в 04:36

Понравилась статья? Поделить с друзьями:
  • Ошибка неоднозначная ссылка на столбец postgresql
  • Ошибка неправильная ссылка на ячейку как исправить
  • Ошибка необъявленный идентификатор делфи
  • Ошибка неправильная конфигурация приложения
  • Ошибка необрабатываемое исключение автокад