MySQL - выбор последней записи из второй таблицы, соответствующей первой таблице
У меня есть две таблицы клиентов и заказов, ниже - структура.
Таблица - клиенты
Таблица - заказы
таблица клиентов имеет таблицу записей клиентов и заказов с заказами, размещенными клиентами,
customer_id в таблице заказов привязана к таблице id таблицы клиентов.
Теперь у одного клиента может быть ноль или один или несколько заказов, я хочу получить последний заказ, размещенный только клиентами.
когда я запускаю следующий запрос простым невидимым соединением, он возвращает все заказы от клиента
SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id
Я также пробовал разные операторы JOIN, но не могу получить последний заказ от клиента, я хочу получить его в одном SQL-запросе для всех клиентов.
Заранее благодарим вас за помощь.
Ответы
Ответ 1
Попробуйте этот запрос
SELECT
c.customer_name,
max(o.order_id)
FROM
customers c
INNER JOIN
orders o
ON
o.customer_id = c.id
GROUP BY
c.customer_name
У вас нет поля даты в таблице заказов, поэтому если последним порядком будет тот, у которого есть max(order_id)
.
Ответ 2
В MySQL есть всего несколько способов заставить его работать (что я сейчас на самом деле). Первая из них сортирует вашу таблицу как desc
до join
:
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN orders o
ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)
Использование в режиме реального времени - единственный способ сделать это, но если вам нужно сделать некоторое соединение не в режиме реального времени, вы можете создать временную таблицу или таблицу псевдонимов, сортируя ее, чтобы сделать свой выбор, например:
CREATE TABLE tmp_your_table AS
SELECT * FROM orders ORDER BY id DESC
Итак, теперь вы можете сделать эту работу:
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN tmp_your_table o ON o.id = tmp_your_table.id
Ответ 3
Попробуйте этот запрос
SELECT
c.customer_name,
o.order_id
FROM
customers c
INNER JOIN
orders o
ON
o.customer_id = c.id
ORDER BY
o.id desc
LIMIT 1;