MySQL, где не существует - PullRequest
0 голосов
/ 11 мая 2011

Что не так с этим кодом? Я продолжаю получать ERROR 1064 (42000): You have an error in your SQL syntax

SELECT clientReport.id
  WHERE clientReport.rowNumber NOT EXISTS (
    SELECT clientReport.rowNumber FROM report02, clientReport
      WHERE report02.id=clientReport.id);

Ответы [ 5 ]

2 голосов
/ 11 мая 2011

Я предполагаю, что вы хотите сделать что-то вроде:

SELECT clientReport.id 
FROM clientReport 
LEFT JOIN report02 ON(report02.id = clientReport.id)
WHERE report02.id is null;

Это вернет все идентификаторы из clientReport, у которых нет соответствующей записи в report02.

Альтернативой может быть:

SELECT clientReport.id FROM clientReport
WHERE clientReport.rowNumber NOT IN (
  SELECT clientReport.rowNumber 
  FROM report02, clientReport
  WHERE report02.id=clientReport.id);
1 голос
/ 11 мая 2011

Вы, вероятно, хотите NOT IN вместо NOT EXISTS

1 голос
/ 11 мая 2011

Какое полное сообщение об ошибке возвращает сервер MySQL? Вы должны получить сообщение об ошибке, как показано ниже:

You have an error in your SQL syntax near `NOT EXISTS`

Вам также следует рассмотреть возможность использования RIGHT JOIN вместо выбора подзапроса, так как RIGHT JOIN, по-видимому, является тем, что вам нужно в этом случае.

РЕДАКТИРОВАТЬ: Кроме того, из-за снижения производительности, наблюдаемого при выполнении подзапросов, вместо этого рекомендуется использовать очень селективные JOIN-ы, при этом, как говорится, будет нормально снова использовать подзапросы в обычных запросах, когда MySQL GA реализует использование LIMIT в подзапросах. Это значительно снизит производительность.

1 голос
/ 11 мая 2011

Вы забыли добавить из предложения в основном запросе.

SELECT clientReport.id from clientReport
  WHERE clientReport.rowNumber NOT IN (
    SELECT clientReport.rowNumber FROM report02, clientReport
      WHERE report02.id=clientReport.id);
1 голос
/ 11 мая 2011

Вы пропустили FROM в первом предложении выбора:

SELECT clientReport.id
  FROM clientReport '<--- need this
  WHERE clientReport.rowNumber NOT EXISTS (
    SELECT clientReport.rowNumber FROM report02, clientReport
      WHERE report02.id=clientReport.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...