В чем проблема синтаксиса при использовании этого подзапроса в предложении where - PullRequest
0 голосов
/ 19 октября 2019
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

Неверный синтаксис рядом с ')'. Ожидается AS, FOR_PATH, ID или QUOTED_ID.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я вижу потенциальные синтаксические ошибки: кажется, что CS245 ссылается на значение, которое может принимать c.cnum, а не на имя столбца. В таком случае его следует заключить в одинарные кавычки.

0 голосов
/ 19 октября 2019

Рассмотрим следующий пример:

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;

Приведенный выше запрос работает как есть. Но проблема в том, что если вы раскомментируете закомментированные строки, вы получите следующее сообщение об ошибке: "T.TABNAME" is an undefined name. и наименьшее значение в Db2 for Linux, Unix and Windows. Вы не можете слишком сильно выдвигать внешние ссылки на столбцы подвыбора.

Таким образом, ваш запрос неверен.
Исправить его сложно, пока вы не предоставите описание задачи с образцом данных и результатоможидается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...