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