【问题标题】:Inner join on an inner join - the column was specified multiple times内连接上的内连接 - 多次指定列
【发布时间】:2020-06-28 00:27:54
【问题描述】:

我有如下表格:

按顺序排列的表格是“student”、“course”和“takes”

我在使用联接收集数据时遇到了一些麻烦。我正在尝试查找至少参加过一次 Comp 的学生的姓名。科学。当然。

这是我的查询:

SELECT S.name
FROM student S
INNER JOIN (SELECT * FROM takes INNER JOIN course) AS C 
ON S.ID = C.ID AND C.dept_name= 'Comp. Sci.' 

但是,我在执行时遇到错误:

Msg 102, Level 15, State 1, Line 32
Incorrect syntax near ')'.

此外,“AS C”还有一条红色下划线:

The column 'course_id' was specified multiple times for 'C'

我们不应该使用自然连接,因为我们只学习了内、外、右、左、交叉等基本连接。

有人可以帮我弄清楚为什么会出现这些错误并进行调试吗?

【问题讨论】:

  • use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。 PS你有一个语法错误。阅读语法和手册。显示组成子表达式是可以的。删除留下错误的代码。阅读您的教科书和/或手册并在谷歌上搜索任何错误消息或许多清晰、简洁和准确的问题/问题/目标的措辞,包括或不包括您的特定字符串/名称和站点:stackoverflow.com 和标签。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停整体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
  • 您的 DBMS 是什么?不带 ON 的 INNER JOIN 不是标准 SQL。始终阅读您正在使用的手册重新功能。当您发布此内容时,您没有被告知不要使用裸露的“sql”标签吗? PS您希望C成为take & course的内部连接。您没有给出minimal reproducible example,但大概他们都有一个 course_id。那么,为什么您会惊讶于一条消息告诉您 C 有 2 个 course_id 列?除了你应该从你实际上没有给我们的代码中得到它。再一次——minimal reproducible example。了解内部联接的工作原理。您在研究错误消息时学到了什么?

标签: sql database debugging join inner-join


【解决方案1】:

您的inner join 不正确,请阅读有关加入here 的更多信息。试试下面的。

SELECT 
   s.name,
   t.*
FROM student s
INNER JOIN takes t 
on s.id = t.id
INNER JOIN course c 
ON t.course_id = c.course_id
WHERE c.dept_name = 'Comp. Sci.' 

【讨论】:

    【解决方案2】:

    如果您只是想要学生,请使用exists

    select s.*
    from students s
    where exists (select 1
                  from takes t join
                       course c
                       on t.course_id = c.course_id
                  where t.id = s.id and t.dept_name = 'Comp Sci.'
                 );
    

    使用exists,您无需担心重复。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多