Sql 在where子句中使用此子查询的语法问题是什么
附近的语法不正确。预期为、对于路径、ID或引用的ID。考虑以下示例: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.
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;