2015-01-24 4 views
-1
select 
    Gid, Class, GroupName 
from 
    Class, Group1 
where 
    Class.Gid = Group1.Gid 

Этот запрос правильно выполняется в БД, но дает ошибку в программе?неопределенный идентификатор имени столбца в SQL Server Запрос в C#

+0

я уже принимаю class.gid –

+0

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

+1

[Плохие привычки пинать: использование старинного JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад) и его использование не рекомендуется –

ответ

1

Используйте псевдонимы таблиц и собственно JOIN Синтаксис:

SELECT cl.Gid, cl.Class, gr.GroupName 
FROM Class cl 
INNER JOIN Group1 gr 
     ON cl.[Gid] = gr.[Gid]; 

Неоднозначный колонок Gid, поскольку он существует в обеих таблицах, но упоминается в списке SELECT, не уточнив, какие таблицы следует выдернуть из.

Для удобства чтения лучше использовать более одного символа в качестве псевдонима. Следовательно, «cl» и «gr» лучше в долгосрочной перспективе, чем «c» и «g».

+0

псевдонимы таблицы являются необязательными. Class.Gid ..... работает так же хорошо –

+0

@Oldfart Да, они являются необязательными, но также очень хорошая практика, чтобы привыкнуть. Нет необходимости копировать полные имена таблиц во всех местах, где он будет использоваться. Запросы гораздо легче читать при использовании достойных (то есть более 1 букв) псевдонимов. –

+0

Я работал для многих, которые придерживаются абсолютно противоположного взгляда на основании удобочитаемости –

1

Проблема в том, что класс и группа 1 имеют свойство GID. Использование псевдонимов различать два свойства:

select c.Gid, c.Class, g.Gid, g.GroupName 
from Class as c 
inner join Group as g on c.Gid = g.Gid 
2

Вы же столбец в таблице как, чтобы дать псевдоним каждого столбца как

пользователя Inner присоединиться, этот тип кодирования старый стиль.

select 
     g1.Gid, 
     cl.Class, 
     g1.GroupName 
from 
    Class cl 
    inner join Group1 g1 
    on cl.Gid=g1.Gid 
2

В поле присутствует Gid в обеих таблицах, вы должны указать, какой вы хотите выбрать. Таким образом, изменение сурика, чтобы сделать работу запроса будет:

select Class.Gid,Class,GroupName from Class,Group1 where Class.Gid=Group1.Gid 

Это хорошая идея, чтобы указать таблицу для каждого поля, что делает его легче увидеть, где данные поступают из, и это делает запрос менее чувствительным для изменения макета таблицы. Вы можете использовать alases, чтобы это не мешало кодированию кода с именами таблиц.

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

select 
    c.Gid, 
    g.Class, 
    g.GroupName 
from 
    Class c 
    inner join Group1 g on c.Gid = g.Gid 
0

Try и дать псевдоним самого имени столбца, что-то вроде этого:

выберите c.Gid как 'ClassGid', класс, ИмяГруппы, g.Gid как 'Group1Gid' из класса а с, Group1 как г где c.Gid = g.Gid

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