Что вызывает ошибку «Столбец не соответствует количеству значений в строке 1»? - PullRequest
0 голосов
/ 18 мая 2019

Код SQL:

CREATE TABLE EMPLOYEE_ORDERS (
        TOTAL_HANDLED INT,
        CONSTRAINT PK_TOTAL PRIMARY KEY (TOTAL_HANDLED)
        );

        INSERT INTO EMPLOYEE_ORDERS (
        SELECT COUNT(ORDERS.EMPLOYEE_ID), EMPLOYEE.EMPLOYEE_ID
        FROM ORDERS LEFT JOIN EMPLOYEE
        ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
        GROUP BY EMPLOYEE.EMPLOYEE_ID
        ORDER BY COUNT(ORDERS.EMPLOYEE_ID));

Я пытался: INSERT INTO EMPLOYEE_ORDERS (TOTAL_HANDLED) (SELECT ....

Я пытаюсь вернуть идентификатор всех сотрудников, которыеобработал более 0 заказов, любые предложения будут высоко оценены

Ответы [ 3 ]

2 голосов
/ 18 мая 2019

Ваш подзапрос возвращает два значения, но у вас есть только один столбец в таблице. Вам нужно переписать свой подзапрос, чтобы избавиться от значения COUNT и использовать его в предложении HAVING для фильтрации идентификаторов сотрудников:

INSERT INTO EMPLOYEE_ORDERS
    SELECT EMPLOYEE.EMPLOYEE_ID
    FROM ORDERS 
    LEFT JOIN EMPLOYEE ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
    GROUP BY EMPLOYEE.EMPLOYEE_ID
    HAVING COUNT(ORDERS.EMPLOYEE_ID) > 0

Обратите внимание, что нет смысла иметь ORDER BY в вашем подзапросе, поскольку это не повлияет на строки, вставленные в таблицу.

Также обратите внимание, что заменив LEFT JOIN на JOIN и поменяв местами порядок таблиц, вы автоматически получите только тех сотрудников, у которых есть 1 или более одинаковых заказов, что позволит упростить запрос:

INSERT INTO EMPLOYEE_ORDERS
    SELECT DISTINCT EMPLOYEE.EMPLOYEE_ID
    FROM EMPLOYEES
    JOIN ORDERS ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
0 голосов
/ 18 мая 2019

Я пытаюсь вернуть идентификатор всех сотрудников, которые обработали более 0 заказов

Другими словами, вы просто хотите, чтобы сотрудники были в таблице ORDERS. Вероятно, лучший метод:

SELECT DISTINCT o.EMPLOYEE_ID
FROM ORDERS o

Если вы также хотите считать, используйте GROUP BY:

SELECT o.EMPLOYEE_ID, COUNT(*)
FROM ORDERS o
GROUP BY o.EMPLOYEE_ID;

Нет JOIN необходимо. Сотрудники, которых вы ищете, уже работают в ORDERS.

0 голосов
/ 18 мая 2019

Если вы просто ищете сравнение списка сотрудников в таблице заказов с возвратом сотрудников с количеством заказов выше 0, я бы, вероятно, сделал что-то вроде:

SELECT DISTINCT emp.Employee_ID
          ,     COUNT(Order_ID)
FROM ORDERS ord
RIGHT OUTER JOIN EMPLOYEES emp ON emp.Employee_ID = ord.Employee_ID
GROUP BY emp.Employee_ID
HAVING COUNT(Order_ID) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...