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



join multiple-tables (2)

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

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

  • Я бы
  • имя покупателя

Стол - заказы

  • Я бы
  • номер заказа
  • Пользовательский ИД

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

customer_id в таблице заказов связан с полем id таблицы клиентов.

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

когда я запускаю следующий запрос простого невидимого соединения, он возвращает все заказы клиента

SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id

Я также пробовал разные операторы JOIN, но не могу получить последний заказ от клиента, я хочу получить его в одном SQL-запросе для всех клиентов.

Спасибо заранее за вашу помощь.


В 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

Попробуйте этот запрос

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) .





multiple-tables