
Obtener sólo el primer resultado con join
Publicado por José Manuel (7 intervenciones) el 11/01/2014 15:21:21
Hola.
Lo primero, aviso que soy novato en esto del sql, pero con vuestra ayuda he creado la siguiente
consulta en MySQL:
La consulta sirve para obtener unos cuantos datos sobre los pedidos en una tienda Prestashop.
La he puesto entera, pero mi duda se centra en el último campo del SELECT, y el penúltimo LEFT JOIN del FROM.
Me explico:
La tabla ps_message contiene un campo id_order que la relaciona con la tabla ps_orders (que también contiene un campo id_order).
En la tabla ps_orders, el campo id_order es una clave primaria, y no puede repetirse, pero en la tabla ps_message, puede haber varios registros con el mismo id_order (como ya supondreis, se trataría de varios mensajes asociados a un mismo pedido).
Lo que quiero es que la consulta me saque sólo cada pedido con el primer mensaje asociado a él.
Sería algo así como poner un LIMIT 1 al último LEFT JOIN, pero evidentemente esto no se puede hacer. He intentado mil cosas, pero no doy con la tecla.
¿Alguna idea de como hacerlo?
Muchas gracias.
Lo primero, aviso que soy novato en esto del sql, pero con vuestra ayuda he creado la siguiente
consulta en MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
select distinctrow
ORDERS.reference as 'REFERENCIA',
ORDERS.current_state as 'STATUS',
ORDERS.invoice_date as 'FECHA_PAGO',
CARRIER.name as 'TRANSPORTE',
ADDRESS_F.firstname as 'NOMBRE_F',
ADDRESS_F.lastname as 'APELLIDO_F',
ADDRESS_F.address1 as 'DIRECCION_F1',
ADDRESS_F.address2 as 'DIRECCION_F2',
ADDRESS_F.postcode as 'CP_F',
ADDRESS_F.city as 'LOCALIDAD_F',
STATE_F.name as 'PROVINCIA_F',
STATE_F.iso_code as 'COD_PROV_F',
COUNTRY_LANG_F.name as 'PAIS_F',
COUNTRY_F.iso_code as 'COD_PAIS_F',
ADDRESS_D.firstname as 'NOMBRE_D',
ADDRESS_D.lastname as 'APELLIDO_D',
ADDRESS_D.address1 as 'DIRECCION_D1',
ADDRESS_D.address2 as 'DIRECCION_D2',
ADDRESS_D.postcode as 'CP_D',
ADDRESS_D.city as 'LOCALIDAD_D',
STATE_D.name as 'PROVINCIA_D',
STATE_D.iso_code as 'COD_PROV_D',
COUNTRY_LANG_D.name as 'PAIS_D',
COUNTRY_D.iso_code as 'COD_PAIS_D',
ORDERS.gift as 'REGALO',
ORDERS.gift_message as 'MENSAJE_REGALO',
ORDER_CARRIER.weight as 'PESO',
ORDER_INVOICE.total_discount_tax_incl as 'DESCUENTO',
ORDER_INVOICE.total_shipping_tax_incl as 'PRECIO_TRANSPORTE',
ADDRESS_F.company as 'EMPRESA_F',
ADDRESS_D.company as 'EMPRESA_D',
MESSAGE.message as 'MENSAJE_PEDIDO',
ORDERS.invoice_number as 'NUM_FRA'
from
ps_orders as ORDERS
left join ps_carrier as CARRIER on CARRIER.id_carrier = ORDERS.id_carrier
left join ps_address as ADDRESS_F on ADDRESS_F.id_address = ORDERS.id_address_invoice
left join ps_state as STATE_F on STATE_F.id_state = ADDRESS_F.id_state
left join ps_country_lang as COUNTRY_LANG_F on COUNTRY_LANG_F.id_country = ADDRESS_F.id_country
left join ps_country as COUNTRY_F on COUNTRY_F.id_country = ADDRESS_F.id_country
left join ps_address as ADDRESS_D on ADDRESS_D.id_address = ORDERS.id_address_delivery
left join ps_state as STATE_D on STATE_D.id_state = ADDRESS_D.id_state
left join ps_country_lang as COUNTRY_LANG_D on COUNTRY_LANG_D.id_country = ADDRESS_D.id_country
left join ps_country as COUNTRY_D on COUNTRY_D.id_country = ADDRESS_D.id_country
left join ps_order_carrier as ORDER_CARRIER on ORDER_CARRIER.id_order = ORDERS.id_order
left join ps_order_invoice as ORDER_INVOICE on ORDER_INVOICE.id_order = ORDERS.id_order
left join ps_message as MESSAGE on MESSAGE.id_order = ORDERS.id_order
where
((ORDERS.invoice_number >= 0) and (ORDERS.invoice_number <= 120))
order by
ORDERS.reference
La consulta sirve para obtener unos cuantos datos sobre los pedidos en una tienda Prestashop.
La he puesto entera, pero mi duda se centra en el último campo del SELECT, y el penúltimo LEFT JOIN del FROM.
Me explico:
La tabla ps_message contiene un campo id_order que la relaciona con la tabla ps_orders (que también contiene un campo id_order).
En la tabla ps_orders, el campo id_order es una clave primaria, y no puede repetirse, pero en la tabla ps_message, puede haber varios registros con el mismo id_order (como ya supondreis, se trataría de varios mensajes asociados a un mismo pedido).
Lo que quiero es que la consulta me saque sólo cada pedido con el primer mensaje asociado a él.
Sería algo así como poner un LIMIT 1 al último LEFT JOIN, pero evidentemente esto no se puede hacer. He intentado mil cosas, pero no doy con la tecla.
¿Alguna idea de como hacerlo?
Muchas gracias.
Valora esta pregunta


0