繁体   English   中英

需要关于不明确的列名的帮助

[英]Need help on ambiguous column name

我有这个 SQL 代码:

CREATE TABLE STUDENT
(
    sid int PRIMARY KEY,
    sname varchar(20) NOT NULL,
    saddress varchar(20) NOT NULL
)

CREATE TABLE COURSE
(
    cid int PRIMARY KEY,
    cname varchar(20) NOT NULL,
    ccredit int NOT NULL
)

CREATE TABLE REGISTER
(
    eid int PRIMARY KEY,
    sid int NOT NULL,
    cid int NOT NULL,
    edate date NOT NULL,

    FOREIGN KEY (sid) REFERENCES STUDENT (sid) 
            ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (cid) REFERENCES COURSE (cid) 
            ON DELETE CASCADE ON UPDATE CASCADE
)

但是,当我想显示注册“数据库”主题的学生的全部详细信息时,我收到以下错误:

消息 209,第 16 层,State 1,第 11 行
不明确的列名“sid”

消息 209,第 16 层,State 1,第 11 行
不明确的列名“cid”

这是查询代码,谁能告诉我我在这里做错了什么?

SELECT eid, edate, cname, sname, saddress, sid, cid
FROM register r
JOIN course c ON c.cid = r.cid
JOIN student s ON r.sid = s.sid
WHERE cname = 'database';

这些列名存在于您从中选择数据的多个表中,因此查询引擎不知道您要使用哪个表。 您可以在SELECT子句中通过添加表(或别名)名称来手动指定它:

SELECT
  eid,
  edate,
  cname,
  sname,
  saddress,
  s.sid,
  c.cid
FROM register r
JOIN course c ON c.cid = r.cid
JOIN student s ON r.sid = s.sid
WHERE cname = 'database'

在注册表和课程表中都有一个名为 cid 的列。 该错误只是说明解析器不知道您想要哪一列。 您需要在 select 语句中使用正确的别名作为列名的前缀。 r.cid用于注册表或c.cid用于课程表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM