C# 中的 SQL Server 查询中的不明确列名 ID


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

此查询在数据库中正确执行,但在程序中出错?

两个表中都有相同的列,因此请提供每列的别名喜欢

用户内部连接,这种类型的编码是旧式的。

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

问题是 Class 和 Group1 都具有 GID 属性。使用别名来区分这两个属性:

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

使用表别名和正确的 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"更好。

尝试为列名本身提供别名,如下所示:

选择 c.Gid 作为 'ClassGid', class, GroupName, g.Gid 作为 'Group1Gid'从 类为 c,组 1 为 g哪里 c.Gid = g.Gid

最新更新