MySQL - выбор последней записи из второй таблицы, соответствующей первой таблице

У меня есть две таблицы клиентов и заказов, ниже - структура.

Таблица - клиенты

  • ID
  • customer_name

Таблица - заказы

  • ID
  • order_id
  • customer_id

таблица клиентов имеет таблицу записей клиентов и заказов с заказами, размещенными клиентами,

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;