SQL ОШИБКА == 1242 (21000): подзапрос возвращает более 1 строки - PullRequest
0 голосов
/ 02 мая 2020

Я начал изучать SQL и получаю сообщение об ошибке, поскольку подзапрос возвращает более 1 строки. В этом запросе я пытаюсь создать таблицу, в которую входят клиенты и в таблице заказов, и в таблице клиентов. Где я делаю не так?

 SELECT (SELECT DISTINCT customerNumber FROM orders),
        (SELECT customerName FROM customers WHERE customerNumber = (SELECT DISTINCT customerNumber FROM orders));

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Вы просто делаете INNER JOIN:

SELECT DISTINCT o.customerNumber, c.customerName
FROM orders o INNER JOIN
     customers C
     ON C.customerNumber = o.customerNumber;

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

Таким образом, здесь подзапрос не будет Работа. Сделайте INNER JOIN вместо этого.

0 голосов
/ 02 мая 2020

Это немного длинно для комментария.

В SQL есть различные типы подзапросов. Критическое различие основано на количестве строк:

  • Подзапрос, который возвращает более одной строки (и часто более одного столбца), является производной таблицей .
  • Некоторые подзапросы являются специальными. Они возвращают максимум одну строку и обычно один столбец. Это скалярные подзапросы .

Скалярный подзапрос может использоваться там, где будет использоваться константное выражение. Например, вы можете использовать константу для = или select. Однако вы не можете использовать набор в этих местах.

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

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