Почему синтаксическая ошибка, когда я сделал псевдоним во вложенном запросе? - PullRequest
0 голосов
/ 04 января 2019
SELECT customers.Name
FROM 
    (SELECT *
     FROM customers AS c
     INNER JOIN orders AS o
     ON c.Id=o.CustomerId) AS co
WHERE customers.Name NOT IN co; #Syntax error: co

19: 21: 06 Код ошибки: 1064. У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'co' в строке 7 0,000 сек

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вероятно, вы хотите получить имена клиентов, которые не разместили заказыно вместо размещения объединенного запроса после оператора NOT IN вы поместили его после FROM.Если это так, используйте это:

SELECT Name
FROM customers
WHERE Name NOT IN (
  SELECT c.Name
  FROM customers AS c
  INNER JOIN orders AS o
  ON c.Id=o.CustomerId
)
0 голосов
/ 04 января 2019
Предикаты

IN() или NOT IN() должны иметь заключенный в скобки список значений или подзапрос.В вашем предикате нет паренов.

Также, даже если у вас были парены, вы не можете сравнить столбец с таким псевдонимом.В контексте предложения WHERE столбец - это скаляр, а псевдоним - это набор столбцов.

Я думаю, вы ищете клиентов, у которых нет заказов.Вот два способа получить это:

SELECT c.Name
FROM customers AS c
WHERE c.Id NOT IN (SELECT CustomerId FROM orders);

Или:

SELECT c.Name
FROM customers AS c
LEFT OUTER JOIN orders AS o ON c.Id=o.CustomerId
WHERE o.CustomerId IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...