首页 > 解决方案 > 需要关于不明确的列名的帮助

问题描述

我有这个 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,状态 1,第 11 行
不明确的列名称“sid”

消息 209,级别 16,状态 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';

标签: sqlsql-server

解决方案


这些列名存在于您从中选择数据的多个表中,因此查询引擎不知道您要使用哪个表。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'

推荐阅读