2013-12-15 3 views
0

Я искал решение этой проблемы с выбором, но не смог найти его.MySQL выберите 1 результат из нескольких таблиц и значение MAX из 1 таблицы, имеющей несколько значений

У меня есть несколько таблиц, где мне нужно сделать один большой выбор. К сожалению, одна таблица содержит допустимые значения mulitple. Но нужно только самое высокое значение.

Table 1: customer (fields: ID | customer_id | Name) 
values: (1, 1, Customer_name) 
Table 2: address (fields: ID | customer_id | address_id | address | order_id) 
values: (1, 1, 1, Streetname_Home, null) and (2, 1, 2, Streetname_Shipping, 2) 
Table 3: order (fields: order_id | customer_id) 
values: (2, 1) 

Это чрезвычайно упрощенный пример реальной ситуации и только для иллюстрации проблемы.

Проблема заключается в том, что таблица адресов может содержать 2 адреса (или более) для каждого клиента. Отбор должен выбрать все, от клиента, из таблицы клиентов. И чем использовать наивысший адрес_ид из таблицы адресов. И все из таблицы заказов.

Так что я сейчас:

Select 
customer.*, 
address.*, 
order.* 
from 
customer left join 
address on (customers.customers_id = address.customers_id) left join 
order on (order.order_id = customer.order_id) 
where order.ID = 1; 

Как есть 2 адреса в этом примере (дом и доставка) Мне нужно только выбрать, чтобы использовать адрес с наибольшим значением address_id. Как прикрепленный к этому адресу order_id.

Так, на основе address_id необходимо получить order_id, чтобы связать выбор в таблице заказов.

Любая помощь приветствуется.

+0

Изменить ГДЕ И - и порядок является зарезервированным словом, так что вам нужно сделать что-то о том, что слишком – Strawberry

+0

Пожалуйста, дайте больше данных выборки , Перейдите на SQLFiddle.com и загрузите некоторые примеры данных. Также предоставите образец вывода. (Вы можете просто предоставить нам список первичных ключей в строке в ожидаемом наборе результатов.) Ваша реализация таблицы адресов кажется странной. Я имел дело с схемами, в которых таблица заказов имеет внешний ключ в таблице адресов (т. Е. Один адрес может быть связан с одним или несколькими заказами). Ваша модель данных кажется обратной: один заказ может быть связан с одним или несколькими адресами , – AgRizzo

+0

Привет, спасибо за ответы, поскольку проект, над которым я работаю, состоит из множества других таблиц, я старался держать его простым. Итак, я понимаю, что структуры таблиц нелогичны. http://www.sqlfiddle.com/#!2/c658c/4/0 На основании столбца Ordinal мне нужно получить needthis_id для дальнейшего выбора данных. – Giancarlo

ответ

0

Я предполагаю, что addressid поле таблицы является его первичным ключом

SELECT customer.*, 
    address.*, 
    order.* 
FROM customer 
LEFT JOIN (SELECT customers_id, MAX(id) AS address_id 
      FROM address 
      GROUP BY customers_id) AS max_address 
    ON customer.customers_id = max_address.customers_id 
LEFT JOIN address 
    ON max_address.address_id = address.id 
LEFT JOIN `order` 
    ON (order.customers_id = customer.customers_id) 
WHERE order.ID = 1; 
+0

Привет, спасибо за ваш ответ. Я до сих пор не могу заставить его работать. Я думаю, что мой пример ввел вас в заданное решение. Так что я немного изменил проводку. Мне нужен выбор, чтобы иметь самый высокий адрес.address_id, чтобы присоединиться к таблице адресов в таблице заказов на адрес.orders_id. – Giancarlo

Смежные вопросы