Sql 在where子句中使用此子查询的语法问题是什么

Sql 在where子句中使用此子查询的语法问题是什么,sql,db2,Sql,Db2,附近的语法不正确。预期为、对于路径、ID或引用的ID。考虑以下示例: SELECT p.pnum, p.pname FROM professor p, class c WHERE p.pnum = c.pnum AND c.cnum = CS245 AND (SELECT COUNT(*) FROM (SELECT MAX(m.grade), MAX(m.grade) - MIN(m.grade) AS diff FROM mark m WHERE m.cnum = c.cnum AND m.

附近的语法不正确。预期为、对于路径、ID或引用的ID。

考虑以下示例:

SELECT p.pnum, p.pname
FROM professor p, class c
WHERE p.pnum = c.pnum AND c.cnum = CS245 AND (SELECT COUNT(*) FROM (SELECT MAX(m.grade), MAX(m.grade) - MIN(m.grade) AS diff 
FROM mark m WHERE m.cnum = c.cnum AND m.term = c.term AND m.section = c.section AND diff <= 20)) = 3
上面的查询按原样工作。但问题是,如果取消注释注释掉的行,将得到以下错误消息:T.TABNAME是一个未定义的名称。至少在Db2 for Linux、Unix和Windows中是这样。 不能将外部推到子选择列引用太深

因此,您的查询是不正确的。
很难纠正它,除非您提供带有数据样本和预期结果的任务描述。

我可以看到一个潜在的语法错误:CS245似乎指的是c.cnum可能采用的值,而不是列名。如果是这种情况,应该用单引号括起来。

c.cnum=CS245应该是c.cnum='CS245'您使用的是哪种RDBMS?请将相关标签添加到您的问题中:mysql、oracle、sql server……您可能希望此查询做什么?@GMB感谢这一部分,已经更新tags@GordonLinoff我不确定我的语法,sql新手,它给了我错误,就像问题中说的,错误在before=3
SELECT COUNT(1)
FROM SYSCAT.TABLES T
WHERE 
(
--  SELECT COUNT(1) 
--  FROM
--  (
  SELECT COUNT(1) 
  FROM SYSCAT.COLUMNS C 
  WHERE C.TABSCHEMA=T.TABSCHEMA AND C.TABNAME=T.TABNAME
--  )
) > 50;