c#中SQL Server查询中的模糊列名称ID

时间:2015-01-24 13:18:47

标签: sql-server tsql

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

此查询在DB中正确执行但在程序中出错?

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

由于两个表中都存在字段Gid,您必须指定要选择的字段。因此,使查询工作的minium更改将是:

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

答案 2 :(得分: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”更好。

答案 3 :(得分:1)

问题是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

答案 4 :(得分:0)

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

选择     c.Gid as' ClassGid',Class,GroupName,g.Gid as' Group1Gid' 从     类为c,Group1为g 哪里     c.Gid = g.Gid