Вы можете создать временную таблицу, вставить как можно больше order_ids
и выполнить left join
в remake_error_type
. При небольшом количестве заказов другие ответы достаточны, но если вы делали это для большого количества заказов, UNION ALL
и подзапросы неэффективны, как для его ввода, так и для выполнения на сервере.
Кроме того, это очень динамичный подход, поскольку вы можете легко управлять значениями в вашей таблице темп, изменяя инструкцию insert.
Однако это будет работать только в том случае, если пользователь базы данных имеет достаточные привилегии: по крайней мере, выберите, создайте временную и удаляемую таблицу.
DROP TABLE IF EXISTS myTempOrders;
CREATE TEMPORARY TABLE myTempOrders (order_id INTEGER, PRIMARY KEY(order_id));
INSERT INTO myTempOrders (order_id) VALUES (1), (2), (100);
SELECT temp.order_id, count(*)
FROM myTempOrders temp
LEFT JOIN remake_error_type ON temp.order_id = remake_error_type.order_id
GROUP BY 1
Если order_id
значение существует в некоторой таблице, то можно извлечь желаемый результат без создания временной таблицы и вставок значения в нее.
Для участия в таблице
- должен иметь первичный ключ автоматического приращения с # строк больше, чем максимальная искомой
order_id
значения
- имеет начальное значение приращения меньше минимума искать
order_id
значение
- не имеют отсутствующих значений в первичном ключе (т. е. никакие записи не были удалены)
, если существует квалифицированная таблица, тогда yo и можно выполнить следующий запрос, где вы должны заменить surrogate
с qualified table name
и surrogate_id с auto-incrementing primary key
из qualified table name
SELECT surrogate.surrogate_id, count(*)
FROM my_qualified_table surrogate
LEFT JOIN remake_error_type ON surrogate.surrogate_id = remake_error_type.order_id
WHERE surrogate.surrogate_id IN (1, 2, 100)
GROUP BY 1
Числа я добавил в операторе я.e (1,2,100) является, например, только динамическим, то есть может быть более трех чисел. – stack2
Является ли 'order_id' внешним ключом? –
Да order_id - это внешний ключ – stack2