select
Gid, Class, GroupName
from
Class, Group1
where
Class.Gid = Group1.Gid
Этот запрос правильно выполняется в БД, но дает ошибку в программе?неопределенный идентификатор имени столбца в SQL Server Запрос в C#
select
Gid, Class, GroupName
from
Class, Group1
where
Class.Gid = Group1.Gid
Этот запрос правильно выполняется в БД, но дает ошибку в программе?неопределенный идентификатор имени столбца в SQL Server Запрос в C#
Используйте псевдонимы таблиц и собственно 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».
псевдонимы таблицы являются необязательными. Class.Gid ..... работает так же хорошо –
@Oldfart Да, они являются необязательными, но также очень хорошая практика, чтобы привыкнуть. Нет необходимости копировать полные имена таблиц во всех местах, где он будет использоваться. Запросы гораздо легче читать при использовании достойных (то есть более 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
Вы же столбец в таблице как, чтобы дать псевдоним каждого столбца как
пользователя Inner присоединиться, этот тип кодирования старый стиль.
select
g1.Gid,
cl.Class,
g1.GroupName
from
Class cl
inner join Group1 g1
on cl.Gid=g1.Gid
В поле присутствует 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
Try и дать псевдоним самого имени столбца, что-то вроде этого:
выберите c.Gid как 'ClassGid', класс, ИмяГруппы, g.Gid как 'Group1Gid' из класса а с, Group1 как г где c.Gid = g.Gid
я уже принимаю class.gid –
это не возможно иметь неоднозначную ошибку столбца, если все они квалифицированы или имя таблицы или псевдоним в _все_ места в запросе. Попробуйте выполнить запрос, который я разместил. Если у вас все еще есть ошибка, тогда выполняемый запрос не тот, который вы считаете. –
[Плохие привычки пинать: использование старинного 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 лет ** назад) и его использование не рекомендуется –