【问题标题】:Inner select syntax error in sql where clausesql where子句中的内部选择语法错误
【发布时间】:2021-08-05 17:50:25
【问题描述】:

我有两张桌子。

  • TblA 具有以下列:StudentName、StudentID、FeeRateID、CourseType、CourseSpeciality。

    StudentGender.CourseType 有 3 个类别(计算机科学、社会研究和文学研究)。 CourseSpeciality(在计算机科学下)有 4 个不同的类别(Java、Python、SQL、R)。社会研究有 2 个,文学研究有 2 个CourseSpecialities

  • TbLB 具有 StudentID、DateOfRegistration、FeeRateID。

出于管理目的,我需要加入这两个表以获取 StudentName, FeeRate, FeeRateID。我被告知要加入两个表以获取所有学生的详细信息。必须包括文学和社会研究学生的所有 CourseSpecialty。

但我被要求包括计算机科学专业的 Java、Python 和 R 课程专业的学生。

我试过了,但是我的代码抛出了一个语法错误。我知道问题在于内部选择(Where 子句),但我无法自己解决这个问题。有人可以帮帮我吗?

SELECT
    A.StudentName, A.StudentID, A.CourseType, B.FeeRateID
FROM
    A
LEFT JOIN
    B ON a.FeeRateId = b.FeeRateID
WHERE 
    A.CourseType IN ('Social Studies', 'Literary Studies', 'Computer Science' (SELECT CourseType FROM A WHERE CourseType = 'Computer Science' and CourseSpecialty IN ('Java', 'Python', R);

【问题讨论】:

  • 您的IN 格式不正确。只需使用两个单独的子句,一个用于常量,一个用于子查询。
  • @Marc_s,如果您能编写代码纠正我的错误 IN 部分,将不胜感激。

标签: sql left-join where-clause


【解决方案1】:

根本不明白为什么在这种情况下需要子查询,因为它会返回已经在 IN(...) 中指定的“计算机科学”。

SELECT
    A.StudentName, A.StudentID, A.CourseType, B.FeeRateID
FROM A
    LEFT JOIN B ON a.FeeRateId = b.FeeRateID
WHERE 
    A.CourseType IN ('Social Studies', 'Literary Studies') 
    OR 
    (A.CourseType = 'Computer Science' AND A.CourseSpecialty IN ('Java', 'Python', 'R'))

【讨论】:

  • 需要将课程专业限制为仅 3 种类型(java、python、r),而社会和文学研究的所有课程专业都需要获得。
  • 我明白这一点,但在您的示例子查询中返回 CourseType ('Computer Science') 这对于所有 CourseSpeciality 都是相同的。而且您已经有了 'Computer Science' 的硬编码值,所以我认为不需要这样的子查询。
猜你喜欢
  • 1970-01-01
  • 2015-07-25
  • 2023-03-30
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多